fhempy: Nespresso

Begonnen von dominik, 14 Januar 2017, 20:31:16

Vorheriges Thema - Nächstes Thema

dominik

Mittlerweile gibt es ein Modul für Nespresso Bluetooth Maschinen:
https://github.com/dominikkarall/fhem_pythonbinding/blob/master/README.md

-- ab hier der alte Text --
Hallo zusammen,

es gibt ja nun auch Nespresso Maschinen mit Bluetooth Anbindung. Glücklicherweise habe ich eine solche seit Weihnachten zum Spielen - und Kaffee trinken ;)

Hat schon jemand versucht die Maschine per gatttool in FHEM anzubinden? Im Internet konnte ich nichts dazu finden. Meine bisherigen Code Recherchen haben ergeben, dass man die Werte über gatttool erst lesen kann, wenn man eine "verschlüsselte" Nespresso Club ID an die Maschine schickt. Leider hatte ich da bis jetzt noch keinen Erfolg.

Sollte da schon jemand weiter gekommen sein, würde ich mich über einen Austausch freuen.

Btw, ich denke es macht Sinn im Forum unter "Hausautomations-Systeme" auch einen Bereich "Bluetooth" zu eröffnen da es immer mehr solche Devices gibt.

Gruß,
Dominik
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

dominik

Hi,

nachdem ich gerade wieder an der Nespresso Bluetooth Maschine bastel, wollte ich mal fragen ob sich damit schon jemand beschäftigt hat?

Ich habe folgendes die letzten Tage gefunden:
https://github.com/tikismoke/home-assistant-nespressoble

Ich habe es bei mir noch nicht getestet, muss noch den Auth Key ausfindig machen. Im Nespresso Code konnte ich sehen, dass der Auth Key eine Zufallszahl ist die beim ersten Verbinden mit der Kaffeemaschine generiert wird. Die Maschine laesst sich dann nur mit diesem Code steuern. Der Code ist auch im eigenen Nespresso Konto hinterlegt. Meine Ueberlegung war schon den Auth Code selbst zu schreiben wenn die Kaffeemaschine noch nicht verbunden ist, dann ginge jedoch keine Nespresso App.
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

dominik

So, ich habe gerade erfolgreich getestet...hier das Modul fuer alle die auch eine Bluetooth Nespresso Maschine haben:
https://github.com/dominikkarall/fhem_pythonbinding

Ich habe mit dieser getestet:
https://www.nespresso.com/de/de/expert-machines-range
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

ReneH87

Ich hab mir jetzt auch mal eine Nespresso Expert gegönnt, die im Laufe der Woche kommen sollte.  ;D

Wie hast du das ganze technisch gelöst? Einfach Bluetooth Stick an den Raspberry? Wie ist bei dir die Reichweite bzw. wie weit sind Kaffeemaschine und Stick voneinander entfernt?

dominik

Zitat von: ReneH87 am 16 November 2020, 15:43:27
Ich hab mir jetzt auch mal eine Nespresso Expert gegönnt, die im Laufe der Woche kommen sollte.  ;D

Wie hast du das ganze technisch gelöst? Einfach Bluetooth Stick an den Raspberry? Wie ist bei dir die Reichweite bzw. wie weit sind Kaffeemaschine und Stick voneinander entfernt?

Ich habe einen RPi mit onboard Bluetooth, der funkt zur Maschine. Sind aktuell ca. 5-6m dazwischen, jedoch ohne Wände. Bei mir macht nur der RPi mit Bluetooth manchmal zicken, daher habe ich das ble_reset alle 24h am Laufen.

Du musst einmalig den Token auslesen, das habe ich im Readme beschrieben, danach kannst du schon Kaffee machen und dich über den aktuellen Kapselstand informieren :)
Hier die Readings
fault 0 2020-11-16 12:05:19
always_1 1 2020-10-04 23:25:59
awake 0 2020-11-16 12:15:27
caps_number 8 2020-11-16 12:05:19
capsule_engaged 0 2020-11-05 12:52:53
capsule_mechanism_jammed 0 2020-10-04 23:25:59
descaling_counter 0 2020-10-04 23:25:59
descaling_needed 1 2020-10-04 23:25:59
device_name Expert_FD3910D8XXXX 2020-11-16 19:26:25
manufacturer Expert_FD3910D8XXXX 2020-11-16 19:26:25
serial_nr fd:39:10:d8:XX:XX 2020-10-04 23:25:59
sleeping 1 2020-11-16 12:15:27
slider 1 2020-11-16 12:05:19
state online 2020-11-16 19:26:25
tray_open_tray_sensor_full 0 2020-11-05 12:47:49
tray_sensor_during_brewing 0 2020-10-04 23:25:59
water_engadged 0 2020-11-05 12:52:53
water_hardness 4 2020-10-19 10:00:32
water_is_empty 0 2020-10-04 23:25:59
water_temp_low 1 2020-11-16 12:15:27
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

ReneH87

Danke  :)

Bin allerdings noch etwas unschlüssig, wie ich das am besten realisiere. fhem läuft bei mir auf einem Synology NAS im docker Container. So wie ich das sehe, hätte ich folgende Möglichkeiten:

  • BT Adapter ans Synology NAS (Nachteil: Reichweite bis zur Maschine fraglich)
  • raspi mit raspbian bespielen und die Remote-Variante umsetzen.

Was mir aber noch nicht ganz klar ist: wo definiere ich bei deinem Code wie der BT Adapter erreichbar ist? Müsste ja irgendwo ein Device /dev/... geben o.ä.?

dominik

Das ist wahrscheinlich RPi die bessere Variante. Kannst ja einen RPi Zero nutzen.

Als BT Adapter wird hci0 verwendet, das habe ich noch nicht konfigurierbar gemacht.
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

ReneH87

Zitat von: dominik am 16 November 2020, 23:32:02
Das ist wahrscheinlich RPi die bessere Variante. Kannst ja einen RPi Zero nutzen.

Als BT Adapter wird hci0 verwendet, das habe ich noch nicht konfigurierbar gemacht.

Warte noch sehnsüchtig, dass die Kaffeemaschine kommt. Morgen sollte es soweit sein  ;D

Klappt eigentlich auch die Integration in Google Home mit gassistant? So nach dem Motto "Ok google, mach mir einen Kaffee"?  8)

ReneH87

Sodele, Kaffeemaschine ist gekommen, raspi zero auch  :)

Habe dein Script auch eingebunden und dabei ist mir folgendes aufgefallen:
- "git clone https://github.com/dominikkarall/fhem_pythonbinding.git" sollte aus dem Home Verzeichnis aus aufgerufen werden. Ich weiß, macht man normal, aber ich war gerade in /tmp und hab dann erst im Service gesehen, dass du auf das Skript in /home verweist.
- pytest musste ich ebenfalls installieren, sonst kam "ModuleNotFoundError: No module named 'importlib_metadata'"

Beim Verbindungsversuch von fhem kommt jetzt allerdings folgende Fehlermeldung:

Nov 21 14:42:43 raspberrypi systemd[1]: Started FHEM PythonBinding.
Nov 21 14:42:47 raspberrypi python3[652]: 2020-11-21 14:42:47,665 - INFO     - lib.fhem_pythonbinding: Starting pythonbinding...
Nov 21 14:43:02 raspberrypi python3[652]: 2020-11-21 14:43:02,675 - INFO     - lib.fhem_pythonbinding: FHEM connection started: 192.168.5.2
Nov 21 14:43:02 raspberrypi python3[652]: 2020-11-21 14:43:02,770 - INFO     - lib.fhem_pythonbinding: FHEM connection started: 192.168.5.2
Nov 21 14:43:02 raspberrypi python3[652]: 2020-11-21 14:43:02,781 - INFO     - lib.fhem_pythonbinding: FHEM connection started: 192.168.5.2
Nov 21 14:43:02 raspberrypi python3[652]: 2020-11-21 14:43:02,811 - INFO     - lib.fhem_pythonbinding: FHEM connection started: 192.168.5.2
Nov 21 14:43:02 raspberrypi python3[652]: 2020-11-21 14:43:02,822 - INFO     - lib.fhem_pythonbinding: FHEM connection started: 192.168.5.2
Nov 21 14:43:02 raspberrypi python3[652]: 2020-11-21 14:43:02,833 - INFO     - lib.fhem_pythonbinding: FHEM connection started: 192.168.5.2
Nov 21 14:43:02 raspberrypi python3[652]: 2020-11-21 14:43:02,843 - INFO     - lib.fhem_pythonbinding: FHEM connection started: 192.168.5.2
Nov 21 14:43:02 raspberrypi python3[652]: 2020-11-21 14:43:02,854 - INFO     - lib.fhem_pythonbinding: FHEM connection started: 192.168.5.2
Nov 21 14:43:02 raspberrypi python3[652]: 2020-11-21 14:43:02,865 - INFO     - lib.fhem_pythonbinding: FHEM connection started: 192.168.5.2
Nov 21 14:43:02 raspberrypi python3[652]: 2020-11-21 14:43:02,876 - INFO     - lib.fhem_pythonbinding: FHEM connection started: 192.168.5.2
Nov 21 14:43:02 raspberrypi python3[652]: 2020-11-21 14:43:02,887 - INFO     - lib.fhem_pythonbinding: FHEM connection started: 192.168.5.2
Nov 21 14:43:02 raspberrypi python3[652]: 2020-11-21 14:43:02,898 - INFO     - lib.fhem_pythonbinding: FHEM connection started: 192.168.5.2
Nov 21 14:43:02 raspberrypi python3[652]: 2020-11-21 14:43:02,909 - INFO     - lib.fhem_pythonbinding: FHEM connection started: 192.168.5.2
Nov 21 14:43:02 raspberrypi python3[652]: 2020-11-21 14:43:02,920 - INFO     - lib.fhem_pythonbinding: FHEM connection started: 192.168.5.2
Nov 21 14:43:02 raspberrypi python3[652]: 2020-11-21 14:43:02,931 - INFO     - lib.fhem_pythonbinding: FHEM connection started: 192.168.5.2
Nov 21 14:43:02 raspberrypi python3[652]: 2020-11-21 14:43:02,950 - INFO     - lib.fhem_pythonbinding: FHEM connection started: 192.168.5.2
Nov 21 14:43:03 raspberrypi python3[652]: 2020-11-21 14:43:03,040 - ERROR    - lib.fhem_pythonbinding: Connection closed error
Nov 21 14:43:03 raspberrypi python3[652]: Traceback (most recent call last):
Nov 21 14:43:03 raspberrypi python3[652]:   File "/home/pi/.local/lib/python3.7/site-packages/websockets/protocol.py", line 827, in transfer_data
Nov 21 14:43:03 raspberrypi python3[652]:     message = await self.read_message()
Nov 21 14:43:03 raspberrypi python3[652]:   File "/home/pi/.local/lib/python3.7/site-packages/websockets/protocol.py", line 895, in read_message
Nov 21 14:43:03 raspberrypi python3[652]:     frame = await self.read_data_frame(max_size=self.max_size)
Nov 21 14:43:03 raspberrypi python3[652]:   File "/home/pi/.local/lib/python3.7/site-packages/websockets/protocol.py", line 971, in read_data_frame
Nov 21 14:43:03 raspberrypi python3[652]:     frame = await self.read_frame(max_size)
Nov 21 14:43:03 raspberrypi python3[652]:   File "/home/pi/.local/lib/python3.7/site-packages/websockets/protocol.py", line 1051, in read_frame
Nov 21 14:43:03 raspberrypi python3[652]:     extensions=self.extensions,
Nov 21 14:43:03 raspberrypi python3[652]:   File "/home/pi/.local/lib/python3.7/site-packages/websockets/framing.py", line 105, in read
Nov 21 14:43:03 raspberrypi python3[652]:     data = await reader(2)
Nov 21 14:43:03 raspberrypi python3[652]:   File "/usr/lib/python3.7/asyncio/streams.py", line 677, in readexactly
Nov 21 14:43:03 raspberrypi python3[652]:     raise IncompleteReadError(incomplete, n)
Nov 21 14:43:03 raspberrypi python3[652]: asyncio.streams.IncompleteReadError: 0 bytes read on a total of 2 expected bytes
Nov 21 14:43:03 raspberrypi python3[652]: The above exception was the direct cause of the following exception:
Nov 21 14:43:03 raspberrypi python3[652]: Traceback (most recent call last):
Nov 21 14:43:03 raspberrypi python3[652]:   File "/home/pi/fhem_pythonbinding/FHEM/bindings/python/lib/fhem_pythonbinding.py", line 40, in pybinding
Nov 21 14:43:03 raspberrypi python3[652]:     async for message in websocket:
Nov 21 14:43:03 raspberrypi python3[652]:   File "/home/pi/.local/lib/python3.7/site-packages/websockets/protocol.py", line 439, in __aiter__
Nov 21 14:43:03 raspberrypi python3[652]:     yield await self.recv()
Nov 21 14:43:03 raspberrypi python3[652]:   File "/home/pi/.local/lib/python3.7/site-packages/websockets/protocol.py", line 509, in recv
Nov 21 14:43:03 raspberrypi python3[652]:     await self.ensure_open()
Nov 21 14:43:03 raspberrypi python3[652]:   File "/home/pi/.local/lib/python3.7/site-packages/websockets/protocol.py", line 803, in ensure_open
Nov 21 14:43:03 raspberrypi python3[652]:     raise self.connection_closed_exc()
Nov 21 14:43:03 raspberrypi python3[652]: websockets.exceptions.ConnectionClosedError: code = 1006 (connection closed abnormally [internal]), no reason
Nov 21 14:43:03 raspberrypi python3[652]: 2020-11-21 14:43:03,070 - INFO     - lib.fhem_pythonbinding: Restart binding
Nov 21 14:43:03 raspberrypi systemd[1]: fhem_pythonbinding.service: Main process exited, code=exited, status=1/FAILURE
Nov 21 14:43:03 raspberrypi systemd[1]: fhem_pythonbinding.service: Failed with result 'exit-code'.
Nov 21 14:43:03 raspberrypi systemd[1]: fhem_pythonbinding.service: Service RestartSec=100ms expired, scheduling restart.
Nov 21 14:43:03 raspberrypi systemd[1]: fhem_pythonbinding.service: Scheduled restart job, restart counter is at 1.
Nov 21 14:43:03 raspberrypi systemd[1]: Stopped FHEM PythonBinding.


Wäre cool, wenn du dir das mal ansehen könntest  ;D

dominik

Hi,

pytest sollte eigentlich nicht benötigt werden. Kannst du sicherheitshalber bitte auch noch ein
sudo pip3 install importlib_metadata
machen?

Wie hast du das Device in FHEM angelegt?
define remote_pybinding BindingsIo REMOTE_IP:15733 Python
Hast du vielleicht mehrere solche Devices angelegt? Wenn ja, am besten mal alle löschen.
Falls du schon ein Device dem remote_pybinding IODev zugewiesen hast, entferne dieses auch vorerst.

Dann starte nochmals fhem_pythonbinding am Remote neu. Da sollte dann im Log nur "Starting fhem_pythonbindg..." stehen, sonst nichts.
Nun leg nochmals mit define das remote_pybinding an und schau was im Log kommt.
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

ReneH87

#10
Danke, jetzt klappts. Hatte zuerst die Devices in fhem angelegt und erst danach gemerkt, dass das Script auf dem raspi noch nicht lief. Dann alles in fhem gelöscht, nochmal neu eingerichtet und schon ging es  :)

Der "descaling_counter" zählt nicht wirklich runter oder ist das bei dir auch?
descaling_counter 65535

Und wie ist das eigentlich mit Standby, kann man die Maschine irgendwie auch per BT wecken?

Google Home Integration hat nach einigem Probieren geklappt (genericDeviceType: coffee_maker):
homebridgeMapping:
{
  "CookCurrentCookingMode": {
    "fixedValue": "BREW"
  },
  "CookCurrentFoodPreset": {
    "fixedValue": "Kaffee"
  },
  "CookCurrentFoodQuantity": {
    "fixedValue": 1
  },
  "CookCurrentFoodUnit": {
    "fixedValue": "NO_UNITS"
  },
  "SimpleCook": {
    "supportedCookingModes": ["BREW"],
    "foodPresets": [{
      "food_preset_name": ["ristretto"],
      "supported_units": ["NO_UNITS"]
    },{
      "food_preset_name": ["espresso"],
      "supported_units": ["NO_UNITS"]
    },{
      "food_preset_name": ["lungo", "kaffee"],
      "supported_units": ["NO_UNITS"]
    },{
      "food_preset_name": ["americano"],
      "supported_units": ["NO_UNITS"]
    },{
      "food_preset_name": ["hotwater", "tee"],
      "supported_units": ["NO_UNITS"]
    }],
    "params": {
      "foodPreset": {
        "cmds": ["ristretto:brew ristretto medium","espresso:brew espresso medium","lungo:brew lungo medium",
"americano:brew americano medium","hotwater:brew hotwater high"]
      }
    }
  }
}


Zudem haben im nespresso Script die Flags für Americano und Heißwasser gefehlt:


                if temp == "medium":
                    command += "00"
                elif temp == "low":
                    command += "01"
                elif temp == "high":
                    command += "02"
                else:
                    command += "00"

                if volume == "ristretto":
                    command += "00"
                elif volume == "espresso":
                    command += "01"
                elif volume == "lungo":
                    command += "02"
                elif volume == "hotwater":
                    command += "04"
                elif volume == "americano":
                    command += "05"
                else:
                    command += "00"

dominik

#11
Super :)

Danke für die Info wegen Hotwater und Americano, nehme ich beim nächsten Update mit auf.
Die Google Home Integration nehme ich auch gleich in FHEM Connect mit auf, damit man dann kein homebridgeMapping mehr benötigt. Danke!

Mein descaling_counter steht schon mehrere Monate auf 0, daher weiß ich noch nicht in welchen Abständen er runterzählt (ja, ich muss mal wieder entkalken...).

//Edit
Für das aus dem Standby holen habe ich auch noch keine Funktion gefunden. In der App gibt es dazu auch keine Funktion - oder ich habe diese noch nicht entdeckt.
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

ReneH87

Beim homeBridgeMapping hatte ich noch einen kleinen Fehler oben drin, hab ich korrigiert:

"cmds": ["ristretto:brew ristretto medium","espresso:brew espresso medium","lungo:brew lungo medium","americano:brew americano medium","hotwater:brew hotwater high"]

Bzgl. Standby: ich schau mir die App mal an, ob es da überhaupt geht. Wenn nicht, wird das sicherlich auch anderweitig nicht gehen.

dominik

Danke!

Zum Einschalten haette ich noch eine Idee, vielleicht kann man 0ml Heisswasser starten. In der App geht 0ml wahrscheinlich nicht, aber vielleicht verarbeitet es das Command per Bluetooth. Das sollte ueber die "recipe" Funktion gehen, die habe ich aber noch nicht integriert.
Siehe: https://github.com/petergullberg/brewbutton#recipe-brew-07
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

ReneH87

#14
Gern  :) sowas macht ja auch richtig Spaß...

Ich hab gerade bemerkt, dass Einschalten gar nicht nötig ist. Z.B. Heißwasser weckt die Maschine auf und sie legt gleich los. Denke das hatte vorhin nicht funktioniert, weil er ja den Bezug nicht startet, wenn der Kapselslider zwischen den Bezügen nicht geöffnet wurde. Müsste mal schauen, ob er es kapiert, wenn ich z.B. am Vorabend eine Kapsel einlege und dann morgens aus dem Bett per Google den Bezug starte  ;D

Ist es für solche Fälle evtl. denkbar die Antwort von Commands zur Maschine in fhem auszugeben? So würde man auch in fhem sehen, warum die Maschine nichts macht?