Git Product home page Git Product logo

thomdietrich / senseowifi Goto Github PK

View Code? Open in Web Editor NEW
83.0 83.0 22.0 48.87 MB

Wifi'ify the Senseo coffee maker. Circuit and firmware for an internal Senseo hack to monitor and control the daily coffee brew (via MQTT) ☕️📶

License: GNU General Public License v3.0

C++ 70.71% C 6.53% Python 22.76%
coffee coffee-lovers esp8266 home-assistant home-automation homie homie-convention homie-esp8266 mqtt mqtt-smarthome openhab openhab2 senseo

senseowifi's Introduction

SenseoWifi - Smart Home Coffee Maker

Wifi'ify the Senseo coffee maker.

The coffee maker is with no doubt a central element of our lives. In the Smart Home where every device is connected and automated, the coffee making can not be left out. Let's bring the Philips Senseo (Basic or Classic) into your Wi-Fi and control it remotely from your smartphone, through automation, or by extension via Alexa!

Yes, this is silly, you should do it too!

Summary

This project contains information and material regarding:

  • Soldering a custom PCB needed to bring Senseo onto a Wi-Fi
  • Connecting the custom PCB to the Senseo PCB
  • Compiling firmware with PlatformIO (e.g. as plugin in VisualStudioCode)
  • Flashing the custom PCB with the provided firmware
  • Connecting to Wi-Fi and MQTT
  • Connecting to Home Assistant, openHAB or any other home automation solution, including voice assistants like Amazon Alexa
  • Adding a buzzer for audio feedback (optional)
  • Adding a cup detector for further automation (optional)

Compatibility

This project is comatible with:

  • Philips Senseo HD7810
  • Philips Senseo HD7811
  • Philips Senseo HD7812
  • Philips Senseo HD7817
  • Philips Senseo HD7865 Quadrante
  • Philips Senseo HD7860 Quadrante
  • … and most probably all similar models with one LED and three buttons

installation example inside the machine

Features

After implementing the steps below your Senseo coffee machine will offer the following new features. This is especially useful in combination with a home automation system.

  • Inform about the current state (Standby, Brewing, ...) of the machine
  • Notify about an empty water tank
  • Notify about a filled up coffee cup
  • Remote control the machine via Wifi/MQTT commands
  • Go through a complete brewing cycle automatically (Turn on, brew, turn off)
  • Audio feedback via a built-in speaker
  • Detect a cup via an optical sensor
  • Collect usage statistics, e.g. stored in InfluxDB and visualized in Grafana

Hardware Modification

The first challenge of this project is to hack the Senseo machine electronics. You need to solder and connect a custom PCB to the machine. In the end the PCB will not be visible from the outside, powered from the inside, connected via Wi-Fi and programmed over-the-air (OTA).

⚠⚠⚠ Attention! For your own safety do not connect AC power while opened up. ⚠⚠⚠

Parts

Part Description
1× Custom PCB See SenseoWifi-PCB folder for schematic
1× WeMos D1 Mini Microcontroller, learn more…
4× Sharp PC817 Optocoupler interfacing with the Senseo board (datasheet). Thanks to these, the Senseo can be connected to AC power and to your PC via USB at the same time. Try to avoid this constellation and be cautious with active AC power.
3× 470Ω Resistor
1× 1.5kΩ Resistor
1× Push button To reset the microcontroller from the outside
1× AC-DC Step Down Converter (220V to 5V) As internally sourced power supply (e.g. ebay.de or HLK-PM01)
Generic male headers A bunch of them
1× Buzzer 12mm Optional - Used for audio feedback, can be disabled in firmware (e.g. reichelt.de)
1× 150Ω Resistor Optional - Size depends on buzzer
1× TCRT5000 Optional - To detect a cup. Reflective Optical Sensor, Regulated Module (e.g. ebay.de)

Power Consumption: The question was raised how much energy is consumed by the modification. The PCB consumes approx. 110mA. Assuming the Senseo machine is connected to power 24/7, the additional electronics raise your electrical bill by 2.00€ per year.

Steps

  1. Solder the custom PCB according to the schematics provided in the SenseoWifi-PCB folder (designed in Fritzing)
  2. Hot clue the custom PCB inside the Senseo machine in a free position such as shown here
  3. Wire the custom PCB via the "Senseo Connections" header (angled pin headers recommended) to interface with the Senseo PCB. The solder pads to use for the LED, the buttons, and ground connection are shown on photos in the images folder, e.g., for the Senseo Classic and Senseo Quadrante
  4. Connect a simple push button (the configuration reset button) to J3 and hot clue in the base of the Senseo housing.
  5. Connect the additional power supply to the Senseo power cable and wire to J4
  6. Prepare a small cutout in the Senseo front and hot clue from behind. Connect to the TCRT header
  7. Connect a USB cable to continue with firmware programming. Do not connect AC power

Please follow the details given in the schematics and the pictures in the images folder, which should make everything pretty clear. Do not hessitate to create a support ticket on GitHub if we missed anything. A pull request to improve this README is always welcome.

schematics

Firmware Upload

The WeMos microcontroller needs to be programmed with the code provided in this repository. Be aware that the custom functionality is build on top of the excellent Homie v3.0 framework.

An MQTT broker is needed in your network (e.g. mosquitto).

Please follow these instructions (last tested 2021-10-01):

  1. Install PlatformIO via Visual Studio Code as decribed here or upgrade your existing installation

  2. Open PlatformIO and load a latest copy of this repository

  3. Connect your Senseo via the USB cable to your PC (do not connect the Senseo to AC power!) and check the devices view of PlatformIO to verify

  4. Transfer the firmware and the configuration web interface to the microcontroller. The full list of PlatformIO project tasks is:

    • Clean
    • Erase Flash
    • Build
    • Upload
    • Upload File System image
    • Monitor

    If any of the steps ends in a connection error dis- and reconnect the USB cable. You were successful when the monitoring terminal shows the SenseoWifi firmware version. For initial hardware testing see below.

  5. Use a smartphone to connect to the provided Wifi, you will be redirected to a configuration web frontend

  6. Provide your Wifi, MQTT, and other settings (we recommend the default homie base topic)

  7. Use an MQTT client to inspect messages sent to the MQTT broker. You were successful when the message "senseo-wifi" is published to the topic homie/senseo-wifi/machine/$name

  8. Disconnect the USB cable, close the Senseo housing, and connect the Senseo machine to AC power. The machine should once again start communicating via MQTT

For Hardware testing: A special piece of code is provided to test that your fresh hardware modifications are working. Enable testIO() in SenseoWifi.cpp and check testIO.cpp for details.

Configuration mode: The configuration web frontend is only available when in configuration mode, i.e. when not yet configured. Press the configuration reset button previously mounted in the base of the machine for 5 seconds to resets the firmware configuration. The machine switches in configuration mode and provides a Wifi accesspoint, which upon connection once again presents the configuration web frontend. Follow these instructions if you ever loose connection, or want to change your Wifi or MQTT settings.

OTA Updates

After an initial flash with the firmware, updates can be sent via Wifi+MQTT, no need to take the machine apart. The web frontend on flash and your custom configuration stay on the device.

python3 ota_updater_202011.py -l 192.168.0.75 -u user -d password -t "homie/" -i "senseo-wifi-rf21" .pio/build/senseo-wifi/firmware.bin

Usage

If everything worked out your machine now communicates its status and accepts commands via MQTT. You are now ready to interact with the machine and integrate it with other systems. Please check the source code of SenseoWifi.cpp for details on states and commands.

Smart Home Integration

With the machine connected to Wifi and MQTT, you can now link a smart home system to the important MQTT topics to integrate the machine with the rest of your smart home.

Home Assistant Configuration Example

The following example integrates the Senseo machine with the home automation solution Home Assistant. The configuration adds all necessary entities, translations to German, and clever automations to make the machine useful. E.g. one automation enables a complete coffee brewing cycle with a single command, the other reminds you of your warm coffee every minute while you didn't pick it up.

Please make sure the machine is connected to your MQTT broker and adapt the machine name in the topic.

Home Assistant config file packages/senseo_wifi.yaml, see home-assistant/senseo_wifi.yaml.

Lovelace configuration for an interactive UI control in the Home Assistant app:

cards:
  - type: entities
    entities:
      - entity: switch.senseowifi_power
        name: Power
      - type: conditional
        conditions:
          - entity: sensor.senseowifi_opstate
            state_not: SENSEO_OFF
        row:
          entity: sensor.senseowifi_opstate
          name: Operationszustand
  - type: conditional
    conditions:
      - entity: binary_sensor.senseowifi_out_of_water
        state: 'on'
    card:
      type: entities
      entities:
        - entity: binary_sensor.senseowifi_out_of_water
          name: Wassertank leer
  - type: conditional
    conditions:
      - entity: switch.senseowifi_power
        state: 'on'
      - entity: binary_sensor.senseowifi_out_of_water
        state_not: 'on'
      - entity: binary_sensor.senseowifi_cup_full
        state: 'off'
    card:
      type: entities
      entities:
        - entity: binary_sensor.senseowifi_cup_available
          name: Tasse steht unter
  - type: conditional
    conditions:
      - entity: binary_sensor.senseowifi_cup_full
        state: 'on'
    card:
      type: entities
      entities:
        - entity: binary_sensor.senseowifi_cup_full
          name: Tasse gefüllt
  - type: conditional
    conditions:
      - entity: sensor.senseowifi_opstate
        state: SENSEO_READY
      - entity: binary_sensor.senseowifi_cup_available
        state: 'on'
      - entity: binary_sensor.senseowifi_cup_full
        state: 'off'
    card:
      type: entities
      entities:
        - type: buttons
          entities:
            - entity: input_boolean.senseowifi_brew_normal
              name: kleine Tasse brühen
              icon: mdi:coffee-to-go
            - entity: input_boolean.senseowifi_brew_double
              name: große Tasse brühen
              icon: mdi:coffee-to-go
title: SenseoWifi
type: vertical-stack

openHAB Configuration Example

The following openHAB configuration allows integration of the Senseo machine with the home automation solution openHAB. Please make sure the machine is connected to your MQTT broker. Insert the MQTT broker IP and replace "senseo-wifi-home" by your device name in the below example.

The expire binding is recommended for debug-value.

Note: Not updated to latest firmware changes.

openHAB things file mqtt.things:

Bridge mqtt:systemBroker:LocalBroker [ host="your-broker-ip", secure=false ]
{
    Thing mqtt:topic:SenseoWiFi "SenseoWiFi" {
    Channels:
        Type string : Debug          "Debug"            [stateTopic="devices/senseo-wifi-home/machine/debug"]
        Type string : OpState        "Zustand"          [stateTopic="devices/senseo-wifi-home/machine/opState"]
        Type switch : OnOff          "OnOff"            [stateTopic="devices/senseo-wifi-home/machine/power", commandTopic="devices/senseo-wifi-home/machine/power/set", on="ON", off="OFF"]
        Type string : Brew           "Brew"             [stateTopic="devices/senseo-wifi-home/machine/brew",commandTopic="devices/senseo-wifi-home/machine/brew/set"]
        Type number : BrewedSize     "BrewedSize"       [stateTopic="devices/senseo-wifi-home/machine/brewedSize"]
        Type string : OutOfWater     "OutOfWater"       [stateTopic="devices/senseo-wifi-home/machine/outOfWater"]
        Type string : CupAvailable   "Tasse vorh."      [stateTopic="devices/senseo-wifi-home/machine/cupAvailable"]
        Type string : CupFull        "Tasse voll"       [stateTopic="devices/senseo-wifi-home/machine/cupFull"]
        Type string : Online         "Online"           [stateTopic="devices/senseo-wifi-home/$online"]

        Type string : version        "Version"          [ stateTopic="devices/senseo/$homie"]
        Type string : name           "Name"             [ stateTopic="devices/senseo/$name"]
        Type string : ip             "IP-address"       [ stateTopic="devices/senseo/$localip"]
        Type string : mac            "MAC-address"      [ stateTopic="devices/senseo/$mac"]
        Type string : fw_name        "Firmware Name"    [ stateTopic="devices/senseo/$fw/name"]
        Type string : fw_version     "Firmware Version" [ stateTopic="devices/senseo/$fw/version"]
        Type string : nodes          "Nodes"            [ stateTopic="devices/senseo/$nodes"]
        Type string : implementation "Implementation"   [ stateTopic="devices/senseo/$implementation"]
        Type string : interval       "Update interval"  [ stateTopic="devices/senseo/$stats/interval"]
    }
}

openHAB items file SenseoWifi.items:

String KU_Senseo_Debug         "Debug [%s]"                          {channel="mqtt:topic:SenseoWiFi:Debug", expire="10s"}
String KU_Senseo_OpState       "Zustand [MAP(senseo-wifi.map):%s]"   {channel="mqtt:topic:SenseoWiFi:OpState"}
Switch KU_Senseo_OnOff         "OnOff"                               {channel="mqtt:topic:SenseoWiFi:OnOff"}
String KU_Senseo_Brew          "Brew"                                {channel="mqtt:topic:SenseoWiFi:Brew"}
Number KU_Senseo_BrewedSize    "BrewedSize"                          {channel="mqtt:topic:SenseoWiFi:BrewedSize"}
String KU_Senseo_OutOfWater    "OutOfWater"                          {channel="mqtt:topic:SenseoWiFi:OutOfWater" [profile="transform:MAP", function="senseo-wifi.map"]}
String KU_Senseo_CupAvailable  "Tasse vorh."                         {channel="mqtt:topic:SenseoWiFi:CupAvailable" [profile="transform:MAP", function="senseo-wifi.map"]}
String KU_Senseo_CupFull       "Tasse voll"                          {channel="mqtt:topic:SenseoWiFi:CupFull" [profile="transform:MAP", function="senseo-wifi.map"]}
String KU_Senseo_Online        "Online"                              {channel="mqtt:topic:SenseoWiFi:Online"}

openHAB sitemap example SenseoWifi.sitemap:

sitemap testing label="Senseo-Tests"
{
    Text item=KU_Senseo_Online label="Fehler [Maschine nicht verfügbar!]" visibility=[KU_Senseo_Online == "false"] valuecolor=["false"="red"]
    Frame label="Status" visibility=[KU_Senseo_Online == "true"] {
        Text item=KU_Senseo_OpState label="Aktueller Zustand"
        Default item=KU_Senseo_Debug      label="Debug" visibility=[KU_Senseo_Debug != UNDEF] valuecolor=["red"]
        Text item=KU_Senseo_OutOfWater label="Wassertank [Leer]" visibility=[KU_Senseo_OpState == SENSEO_NOWATER] valuecolor=[ON="maroon"] icon="water"
        Switch item=KU_Senseo_CupAvailable label="Tasse vorhanden" icon="coffee_cup"
        Switch item=KU_Senseo_CupFull label="Tasse voll" visibility=[KU_Senseo_CupAvailable == ON] icon="coffee_cup_hot"
    }
    Frame label="Steuerung" visibility=[KU_Senseo_Online == "true"] {
        Switch item=KU_Senseo_OnOff label="Ein-/Ausschalten"
        Switch item=KU_Senseo_Brew label="Kaffee Kochen" mappings=[1cup="☕", 2cup="☕☕"]
    }
}

Contribution

Further details outstanding. Don't hesitate to open a support issue!

Happy Hacking!


Disclaimer and Legal

Philips and Senseo are registered trademarks of Philips GmbH.

This project is a community project not for commercial use. The authors will not be held responsible in the event of device failure or bad tasting coffee.

This project is in no way affiliated with, authorized, maintained, sponsored or endorsed by Philips or any of its affiliates or subsidiaries.

senseowifi's People

Contributors

bschlaack avatar hakzel avatar mboremski avatar pattyland avatar thomdietrich avatar vincemasuka 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  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  avatar  avatar  avatar  avatar  avatar  avatar  avatar

senseowifi's Issues

Add README

A README with a short description, build and usage instructions needs to be added!

@guybrushix out of coincidence I saw your forking of the repository. The README is currently missing but the PCB+code are doing their job just great since one year in two machines. Do you need any help?

🙋📈 How many active users do we have?

Hey all,
for a long time, I was wondering how many people did get inspired by this project and built their own SenseoWifi. This little informal survey is purely voluntary and I'm looking forward to see where we get :)

Please add whichever reaction applies to you:

  • 🚀 - My SenseoWifi is up and running
  • 🎉 - I did my own additional modifications
  • 👍 - Mine works but we ended up not really using the new functions
  • 😕 - I was intrigued but failed to complete the rebuild
  • 👀 - I'm interested in the project but never dared to go down the rabbit hole

If you have a special story to tell, leave a comment.
Thanks all

OutOfWater false not sent

Maybe because machine was off at the time. OutOfWater->true needs to be send when entering READY state.

Kompilieren schlägt fehl

Hallo.

Ich habe mir eure Platine auf Lochraster nachgebastelt und scheitere nun leider beim Kompilieren der Firmware. Ich poste einfach mal eben die komplette Ausgabe:

`> Executing task: platformio run <

Processing senseo-wifi (platform: espressif8266; board: d1_mini; framework: arduino)

Verbose mode can be enabled via -v, --verbose option
CONFIGURATION: https://docs.platformio.org/page/boards/espressif8266/d1_mini.html
PLATFORM: Espressif 8266 (1.8.0) > WeMos D1 R2 & mini
HARDWARE: ESP8266 80MHz, 80KB RAM, 4MB Flash
PACKAGES:

  • framework-arduinoespressif8266 2.20402.4 (2.4.2)
  • tool-esptool 1.413.0 (4.13)
  • toolchain-xtensa 1.40802.0 (4.8.2)
    LDF: Library Dependency Finder -> http://bit.ly/configure-pio-ldf
    LDF Modes: Finder ~ chain, Compatibility ~ soft
    Found 34 compatible libraries
    Scanning dependencies...
    Dependency Graph
    |-- 3.0.0+sha.cfb3346
    | |-- 6.17.0
    | |-- 0.8.2
    | | |-- 1.2.0
    | | | |-- 1.0
    | |-- 2.55.0
    | |-- 1.2.3
    | | |-- 1.2.0
    | | | |-- 1.0
    | | |-- 1.0
    | | |-- 1.0
    | | |-- 6.17.0
    | |-- 1.0
    | |-- 1.0
    | |-- 1.1.0
    | | |-- 1.0
    | |-- 1.1
    | | |-- 1.0
    | |-- 1.2.0
    | | |-- 1.0
    | |--
    | | |-- 1.0
    Building in release mode
    Compiling .pio/build/senseo-wifi/lib74e/Homie@src-0c5d0d687d7f69195d2d563c4c8249b9/Homie/Boot/BootConfig.cpp.o
    Compiling .pio/build/senseo-wifi/lib74e/Homie@src-0c5d0d687d7f69195d2d563c4c8249b9/Homie/Config.cpp.o
    Compiling .pio/build/senseo-wifi/lib74e/Homie@src-0c5d0d687d7f69195d2d563c4c8249b9/Homie/Utils/Validation.cpp.o
    Compiling .pio/build/senseo-wifi/lib74e/Homie@src-0c5d0d687d7f69195d2d563c4c8249b9/SendingPromise.cpp.o
    .pio/libdeps/senseo-wifi/Homie@src-0c5d0d687d7f69195d2d563c4c8249b9/src/Homie/Config.cpp: In member function 'bool HomieInternals::Config::load()':
    .pio/libdeps/senseo-wifi/Homie@src-0c5d0d687d7f69195d2d563c4c8249b9/src/Homie/Config.cpp:74:53: error: ambiguous overload for 'operator|' (operand types are 'ArduinoJson6170_91::enable_if<true, ArduinoJson6170_91::MemberProxy<ArduinoJson6170_91::ObjectRef, const char*> >::type {aka ArduinoJson6170_91::MemberProxy<ArduinoJson6170_91::ObjectRef, const char*>}' and 'const char*')
    const char* reqDeviceId = parsedJson["device_id"] | DeviceId::get();
    ^
    .pio/libdeps/senseo-wifi/Homie@src-0c5d0d687d7f69195d2d563c4c8249b9/src/Homie/Config.cpp:74:53: note: candidates are:
    In file included from .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantRef.hpp:16:0,
    from .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Array/ArrayIterator.hpp:8,
    from .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Array/ArrayRef.hpp:8,
    from .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson.hpp:17,
    from .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson.h:9,
    from .pio/libdeps/senseo-wifi/Homie@src-0c5d0d687d7f69195d2d563c4c8249b9/src/Homie/Config.hpp:5,
    from .pio/libdeps/senseo-wifi/Homie@src-0c5d0d687d7f69195d2d563c4c8249b9/src/Homie/Config.cpp:1:
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantOperators.hpp:33:71: note: typename ArduinoJson6170_91::enable_if<ArduinoJson6170_91::is_same<T, const char*>::value, T>::type ArduinoJson6170_91::operator|(const TVariant&, T) [with T = const char*; TVariant = ArduinoJson6170_91::MemberProxy<ArduinoJson6170_91::ObjectRef, const char*>; typename ArduinoJson6170_91::enable_if<ArduinoJson6170_91::is_same<T, const char*>::value, T>::type = const char*]
    friend typename enable_if<is_same<T, const char >::value, T>::type operator|(
    ^
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantOperators.hpp:22:62: note: typename ArduinoJson6170_91::enable_if<(! ArduinoJson6170_91::IsVisitable::value), T>::type ArduinoJson6170_91::operator|(const TVariant&, const T&) [with T = const char
    ; TVariant = ArduinoJson6170_91::MemberProxy<ArduinoJson6170_91::ObjectRef, const char*>; typename ArduinoJson6170_91::enable_if<(! ArduinoJson6170_91::IsVisitable::value), T>::type = const char*]
    friend typename enable_if<!IsVisitable::value, T>::type operator|(
    ^
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantOperators.hpp:33:71: note: typename ArduinoJson6170_91::enable_if<ArduinoJson6170_91::is_same<T, const char*>::value, T>::type ArduinoJson6170_91::operator|(const TVariant&, T) [with T = const char*; TVariant = ArduinoJson6170_91::ElementProxy<ArduinoJson6170_91::JsonDocument&>; typename ArduinoJson6170_91::enable_if<ArduinoJson6170_91::is_same<T, const char*>::value, T>::type = const char*]
    friend typename enable_if<is_same<T, const char >::value, T>::type operator|(
    ^
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantOperators.hpp:22:62: note: typename ArduinoJson6170_91::enable_if<(! ArduinoJson6170_91::IsVisitable::value), T>::type ArduinoJson6170_91::operator|(const TVariant&, const T&) [with T = const char
    ; TVariant = ArduinoJson6170_91::ElementProxy<ArduinoJson6170_91::JsonDocument&>; typename ArduinoJson6170_91::enable_if<(! ArduinoJson6170_91::IsVisitable::value), T>::type = const char*]
    friend typename enable_if<!IsVisitable::value, T>::type operator|(
    ^
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantOperators.hpp:33:71: note: typename ArduinoJson6170_91::enable_if<ArduinoJson6170_91::is_same<T, const char*>::value, T>::type ArduinoJson6170_91::operator|(const TVariant&, T) [with T = const char*; TVariant = ArduinoJson6170_91::VariantConstRef; typename ArduinoJson6170_91::enable_if<ArduinoJson6170_91::is_same<T, const char*>::value, T>::type = const char*]
    friend typename enable_if<is_same<T, const char >::value, T>::type operator|(
    ^
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantOperators.hpp:22:62: note: typename ArduinoJson6170_91::enable_if<(! ArduinoJson6170_91::IsVisitable::value), T>::type ArduinoJson6170_91::operator|(const TVariant&, const T&) [with T = const char
    ; TVariant = ArduinoJson6170_91::VariantConstRef; typename ArduinoJson6170_91::enable_if<(! ArduinoJson6170_91::IsVisitable::value), T>::type = const char*]
    friend typename enable_if<!IsVisitable::value, T>::type operator|(
    ^
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantOperators.hpp:33:71: note: typename ArduinoJson6170_91::enable_if<ArduinoJson6170_91::is_same<T, const char*>::value, T>::type ArduinoJson6170_91::operator|(const TVariant&, T) [with T = const char*; TVariant = ArduinoJson6170_91::VariantRef; typename ArduinoJson6170_91::enable_if<ArduinoJson6170_91::is_same<T, const char*>::value, T>::type = const char*]
    friend typename enable_if<is_same<T, const char >::value, T>::type operator|(
    ^
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantOperators.hpp:22:62: note: typename ArduinoJson6170_91::enable_if<(! ArduinoJson6170_91::IsVisitable::value), T>::type ArduinoJson6170_91::operator|(const TVariant&, const T&) [with T = const char
    ; TVariant = ArduinoJson6170_91::VariantRef; typename ArduinoJson6170_91::enable_if<(! ArduinoJson6170_91::IsVisitable::value), T>::type = const char*]
    friend typename enable_if<!IsVisitable::value, T>::type operator|(
    ^
    .pio/libdeps/senseo-wifi/Homie@src-0c5d0d687d7f69195d2d563c4c8249b9/src/Homie/Config.cpp:88:8: warning: unused variable 'reqMqttSsl' [-Wunused-variable]
    bool reqMqttSsl = reqMqtt["ssl"] | false;
    ^
    .pio/libdeps/senseo-wifi/Homie@src-0c5d0d687d7f69195d2d563c4c8249b9/src/Homie/Config.cpp:92:15: warning: unused variable 'reqMqttFingerprint' [-Wunused-variable]
    const char* reqMqttFingerprint = reqMqtt["ssl_fingerprint"] | "";
    ^
    In file included from .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Array/ArrayIterator.hpp:8:0,
    from .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Array/ArrayRef.hpp:8,
    from .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson.hpp:17,
    from .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson.h:9,
    from .pio/libdeps/senseo-wifi/Homie@src-0c5d0d687d7f69195d2d563c4c8249b9/src/Homie/Utils/Validation.hpp:5,
    from .pio/libdeps/senseo-wifi/Homie@src-0c5d0d687d7f69195d2d563c4c8249b9/src/Homie/Utils/Validation.cpp:1:
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantRef.hpp: In instantiation of 'ArduinoJson6170_91::VariantConstRef::operator T() const [with T = ArduinoJson6170_91::ObjectRef]':
    .pio/libdeps/senseo-wifi/Homie@src-0c5d0d687d7f69195d2d563c4c8249b9/src/Homie/Utils/Validation.cpp:374:84: required from here
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantRef.hpp:362:30: error: no matching function for call to 'variantAs(const ArduinoJson6170_91::VariantData* const&)'
    return variantAs(_data);
    ^
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantRef.hpp:362:30: note: candidates are:
    In file included from .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantRef.hpp:14:0,
    from .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Array/ArrayIterator.hpp:8,
    from .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Array/ArrayRef.hpp:8,
    from .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson.hpp:17,
    from .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson.h:9,
    from .pio/libdeps/senseo-wifi/Homie@src-0c5d0d687d7f69195d2d563c4c8249b9/src/Homie/Utils/Validation.hpp:5,
    from .pio/libdeps/senseo-wifi/Homie@src-0c5d0d687d7f69195d2d563c4c8249b9/src/Homie/Utils/Validation.cpp:1:
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantAs.hpp:58:1: note: template typename ArduinoJson6170_91::enable_if<(ArduinoJson6170_91::is_integral::value && (! ArduinoJson6170_91::is_same<bool, T>::value)), T>::type ArduinoJson6170_91::variantAs(const ArduinoJson6170_91::VariantData*)
    variantAs(const VariantData* data) {
    ^
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantAs.hpp:58:1: note: template argument deduction/substitution failed:
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantAs.hpp: In substitution of 'template typename ArduinoJson6170_91::enable_if<(ArduinoJson6170_91::is_integral::value && (! ArduinoJson6170_91::is_same<bool, T>::value)), T>::type ArduinoJson6170_91::variantAs(const ArduinoJson6170_91::VariantData*) [with T = ArduinoJson6170_91::ObjectRef]':
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantRef.hpp:362:30: required from 'ArduinoJson6170_91::VariantConstRef::operator T() const [with T = ArduinoJson6170_91::ObjectRef]'
    .pio/libdeps/senseo-wifi/Homie@src-0c5d0d687d7f69195d2d563c4c8249b9/src/Homie/Utils/Validation.cpp:374:84: required from here
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantAs.hpp:58:1: error: no type named 'type' in 'struct ArduinoJson6170_91::enable_if<false, ArduinoJson6170_91::ObjectRef>'
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantRef.hpp: In instantiation of 'ArduinoJson6170_91::VariantConstRef::operator T() const [with T = ArduinoJson6170_91::ObjectRef]':
    .pio/libdeps/senseo-wifi/Homie@src-0c5d0d687d7f69195d2d563c4c8249b9/src/Homie/Utils/Validation.cpp:374:84: required from here
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantAs.hpp:64:55: note: template typename ArduinoJson6170_91::enable_if<ArduinoJson6170_91::is_enum::value, T>::type ArduinoJson6170_91::variantAs(const ArduinoJson6170_91::VariantData*)
    inline typename enable_if<is_enum::value, T>::type variantAs(
    ^
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantAs.hpp:64:55: note: template argument deduction/substitution failed:
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantAs.hpp: In substitution of 'template typename ArduinoJson6170_91::enable_if<ArduinoJson6170_91::is_enum::value, T>::type ArduinoJson6170_91::variantAs(const ArduinoJson6170_91::VariantData*) [with T = ArduinoJson6170_91::ObjectRef]':
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantRef.hpp:362:30: required from 'ArduinoJson6170_91::VariantConstRef::operator T() const [with T = ArduinoJson6170_91::ObjectRef]'
    .pio/libdeps/senseo-wifi/Homie@src-0c5d0d687d7f69195d2d563c4c8249b9/src/Homie/Utils/Validation.cpp:374:84: required from here
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantAs.hpp:64:55: error: no type named 'type' in 'struct ArduinoJson6170_91::enable_if<false, ArduinoJson6170_91::ObjectRef>'
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantRef.hpp: In instantiation of 'ArduinoJson6170_91::VariantConstRef::operator T() const [with T = ArduinoJson6170_91::ObjectRef]':
    .pio/libdeps/senseo-wifi/Homie@src-0c5d0d687d7f69195d2d563c4c8249b9/src/Homie/Utils/Validation.cpp:374:84: required from here
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantAs.hpp:70:61: note: template typename ArduinoJson6170_91::enable_if<ArduinoJson6170_91::is_same<T, bool>::value, T>::type ArduinoJson6170_91::variantAs(const ArduinoJson6170_91::VariantData*)
    inline typename enable_if<is_same<T, bool>::value, T>::type variantAs(
    ^
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantAs.hpp:70:61: note: template argument deduction/substitution failed:
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantAs.hpp: In substitution of 'template typename ArduinoJson6170_91::enable_if<ArduinoJson6170_91::is_same<T, bool>::value, T>::type ArduinoJson6170_91::variantAs(const ArduinoJson6170_91::VariantData*) [with T = ArduinoJson6170_91::ObjectRef]':
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantRef.hpp:362:30: required from 'ArduinoJson6170_91::VariantConstRef::operator T() const [with T = ArduinoJson6170_91::ObjectRef]'
    .pio/libdeps/senseo-wifi/Homie@src-0c5d0d687d7f69195d2d563c4c8249b9/src/Homie/Utils/Validation.cpp:374:84: required from here
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantAs.hpp:70:61: error: no type named 'type' in 'struct ArduinoJson6170_91::enable_if<false, ArduinoJson6170_91::ObjectRef>'
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantRef.hpp: In instantiation of 'ArduinoJson6170_91::VariantConstRef::operator T() const [with T = ArduinoJson6170_91::ObjectRef]':
    .pio/libdeps/senseo-wifi/Homie@src-0c5d0d687d7f69195d2d563c4c8249b9/src/Homie/Utils/Validation.cpp:374:84: required from here
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantAs.hpp:76:65: note: template typename ArduinoJson6170_91::enable_if<ArduinoJson6170_91::is_floating_point< >::value, TOut>::type ArduinoJson6170_91::variantAs(const ArduinoJson6170_91::VariantData*)
    inline typename enable_if<is_floating_point::value, T>::type variantAs(
    ^
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantAs.hpp:76:65: note: template argument deduction/substitution failed:
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantAs.hpp: In substitution of 'template typename ArduinoJson6170_91::enable_if<ArduinoJson6170_91::is_floating_point< >::value, TOut>::type ArduinoJson6170_91::variantAs(const ArduinoJson6170_91::VariantData*) [with T = ArduinoJson6170_91::ObjectRef]':
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantRef.hpp:362:30: required from 'ArduinoJson6170_91::VariantConstRef::operator T() const [with T = ArduinoJson6170_91::ObjectRef]'
    .pio/libdeps/senseo-wifi/Homie@src-0c5d0d687d7f69195d2d563c4c8249b9/src/Homie/Utils/Validation.cpp:374:84: required from here
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantAs.hpp:76:65: error: no type named 'type' in 'struct ArduinoJson6170_91::enable_if<false, ArduinoJson6170_91::ObjectRef>'
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantRef.hpp: In instantiation of 'ArduinoJson6170_91::VariantConstRef::operator T() const [with T = ArduinoJson6170_91::ObjectRef]':
    .pio/libdeps/senseo-wifi/Homie@src-0c5d0d687d7f69195d2d563c4c8249b9/src/Homie/Utils/Validation.cpp:374:84: required from here
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantAs.hpp:85:1: note: template typename ArduinoJson6170_91::enable_if<(ArduinoJson6170_91::is_same<T, const char*>::value || ArduinoJson6170_91::is_same<T, char*>::value), const char*>::type ArduinoJson6170_91::variantAs(const ArduinoJson6170_91::VariantData*)
    variantAs(const VariantData* data) {
    ^
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantAs.hpp:85:1: note: template argument deduction/substitution failed:
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantAs.hpp: In substitution of 'template typename ArduinoJson6170_91::enable_if<(ArduinoJson6170_91::is_same<T, const char*>::value || ArduinoJson6170_91::is_same<T, char*>::value), const char*>::type ArduinoJson6170_91::variantAs(const ArduinoJson6170_91::VariantData*) [with T = ArduinoJson6170_91::ObjectRef]':
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantRef.hpp:362:30: required from 'ArduinoJson6170_91::VariantConstRef::operator T() const [with T = ArduinoJson6170_91::ObjectRef]'
    .pio/libdeps/senseo-wifi/Homie@src-0c5d0d687d7f69195d2d563c4c8249b9/src/Homie/Utils/Validation.cpp:374:84: required from here
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantAs.hpp:85:1: error: no type named 'type' in 'struct ArduinoJson6170_91::enable_if<false, const char*>'
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantRef.hpp: In instantiation of 'ArduinoJson6170_91::VariantConstRef::operator T() const [with T = ArduinoJson6170_91::ObjectRef]':
    .pio/libdeps/senseo-wifi/Homie@src-0c5d0d687d7f69195d2d563c4c8249b9/src/Homie/Utils/Validation.cpp:374:84: required from here
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantAs.hpp:90:3: note: template T ArduinoJson6170_91::variantAs(ArduinoJson6170_91::VariantData*, ArduinoJson6170_91::MemoryPool*)
    T variantAs(VariantData* data, MemoryPool*) {
    ^
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantAs.hpp:90:3: note: template argument deduction/substitution failed:
    In file included from .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Array/ArrayIterator.hpp:8:0,
    from .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Array/ArrayRef.hpp:8,
    from .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson.hpp:17,
    from .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson.h:9,
    from .pio/libdeps/senseo-wifi/Homie@src-0c5d0d687d7f69195d2d563c4c8249b9/src/Homie/Utils/Validation.hpp:5,
    from .pio/libdeps/senseo-wifi/Homie@src-0c5d0d687d7f69195d2d563c4c8249b9/src/Homie/Utils/Validation.cpp:1:
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantRef.hpp:362:30: note: cannot convert '((const ArduinoJson6170_91::VariantConstRef*)this)->ArduinoJson6170_91::VariantConstRef::.ArduinoJson6170_91::VariantRefBase::_data' (type 'const ArduinoJson6170_91::VariantData* const') to type 'ArduinoJson6170_91::VariantData*'
    return variantAs(_data);
    ^
    In file included from .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson.hpp:30:0,
    from .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson.h:9,
    from .pio/libdeps/senseo-wifi/Homie@src-0c5d0d687d7f69195d2d563c4c8249b9/src/Homie/Utils/Validation.hpp:5,
    from .pio/libdeps/senseo-wifi/Homie@src-0c5d0d687d7f69195d2d563c4c8249b9/src/Homie/Utils/Validation.cpp:1:
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantAsImpl.hpp:14:70: note: template typename ArduinoJson6170_91::enable_if<ArduinoJson6170_91::is_same<ArduinoJson6170_91::ArrayConstRef, T>::value, T>::type ArduinoJson6170_91::variantAs(const ArduinoJson6170_91::VariantData*)
    inline typename enable_if<is_same<ArrayConstRef, T>::value, T>::type variantAs(
    ^
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantAsImpl.hpp:14:70: note: template argument deduction/substitution failed:
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantAsImpl.hpp: In substitution of 'template typename ArduinoJson6170_91::enable_if<ArduinoJson6170_91::is_same<ArduinoJson6170_91::ArrayConstRef, T>::value, T>::type ArduinoJson6170_91::variantAs(const ArduinoJson6170_91::VariantData*) [with T = ArduinoJson6170_91::ObjectRef]':
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantRef.hpp:362:30: required from 'ArduinoJson6170_91::VariantConstRef::operator T() const [with T = ArduinoJson6170_91::ObjectRef]'
    .pio/libdeps/senseo-wifi/Homie@src-0c5d0d687d7f69195d2d563c4c8249b9/src/Homie/Utils/Validation.cpp:374:84: required from here
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantAsImpl.hpp:14:70: error: no type named 'type' in 'struct ArduinoJson6170_91::enable_if<false, ArduinoJson6170_91::ObjectRef>'
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantRef.hpp: In instantiation of 'ArduinoJson6170_91::VariantConstRef::operator T() const [with T = ArduinoJson6170_91::ObjectRef]':
    .pio/libdeps/senseo-wifi/Homie@src-0c5d0d687d7f69195d2d563c4c8249b9/src/Homie/Utils/Validation.cpp:374:84: required from here
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantAsImpl.hpp:20:71: note: template typename ArduinoJson6170_91::enable_if<ArduinoJson6170_91::is_same<ArduinoJson6170_91::ObjectConstRef, T>::value, T>::type ArduinoJson6170_91::variantAs(const ArduinoJson6170_91::VariantData*)
    inline typename enable_if<is_same<ObjectConstRef, T>::value, T>::type variantAs(
    ^
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantAsImpl.hpp:20:71: note: template argument deduction/substitution failed:
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantAsImpl.hpp: In substitution of 'template typename ArduinoJson6170_91::enable_if<ArduinoJson6170_91::is_same<ArduinoJson6170_91::ObjectConstRef, T>::value, T>::type ArduinoJson6170_91::variantAs(const ArduinoJson6170_91::VariantData*) [with T = ArduinoJson6170_91::ObjectRef]':
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantRef.hpp:362:30: required from 'ArduinoJson6170_91::VariantConstRef::operator T() const [with T = ArduinoJson6170_91::ObjectRef]'
    .pio/libdeps/senseo-wifi/Homie@src-0c5d0d687d7f69195d2d563c4c8249b9/src/Homie/Utils/Validation.cpp:374:84: required from here
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantAsImpl.hpp:20:71: error: no type named 'type' in 'struct ArduinoJson6170_91::enable_if<false, ArduinoJson6170_91::ObjectRef>'
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantRef.hpp: In instantiation of 'ArduinoJson6170_91::VariantConstRef::operator T() const [with T = ArduinoJson6170_91::ObjectRef]':
    .pio/libdeps/senseo-wifi/Homie@src-0c5d0d687d7f69195d2d563c4c8249b9/src/Homie/Utils/Validation.cpp:374:84: required from here
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantAsImpl.hpp:27:1: note: template typename ArduinoJson6170_91::enable_if<ArduinoJson6170_91::is_same<ArduinoJson6170_91::VariantConstRef, T>::value, T>::type ArduinoJson6170_91::variantAs(const ArduinoJson6170_91::VariantData*)
    variantAs(const VariantData* _data) {
    ^
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantAsImpl.hpp:27:1: note: template argument deduction/substitution failed:
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantAsImpl.hpp: In substitution of 'template typename ArduinoJson6170_91::enable_if<ArduinoJson6170_91::is_same<ArduinoJson6170_91::VariantConstRef, T>::value, T>::type ArduinoJson6170_91::variantAs(const ArduinoJson6170_91::VariantData*) [with T = ArduinoJson6170_91::ObjectRef]':
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantRef.hpp:362:30: required from 'ArduinoJson6170_91::VariantConstRef::operator T() const [with T = ArduinoJson6170_91::ObjectRef]'
    .pio/libdeps/senseo-wifi/Homie@src-0c5d0d687d7f69195d2d563c4c8249b9/src/Homie/Utils/Validation.cpp:374:84: required from here
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantAsImpl.hpp:27:1: error: no type named 'type' in 'struct ArduinoJson6170_91::enable_if<false, ArduinoJson6170_91::ObjectRef>'
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantRef.hpp: In instantiation of 'ArduinoJson6170_91::VariantConstRef::operator T() const [with T = ArduinoJson6170_91::ObjectRef]':
    .pio/libdeps/senseo-wifi/Homie@src-0c5d0d687d7f69195d2d563c4c8249b9/src/Homie/Utils/Validation.cpp:374:84: required from here
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantAsImpl.hpp:32:65: note: template typename ArduinoJson6170_91::enable_if<ArduinoJson6170_91::IsWriteableString< >::value, T>::type ArduinoJson6170_91::variantAs(const ArduinoJson6170_91::VariantData*)
    inline typename enable_if<IsWriteableString::value, T>::type variantAs(
    ^
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantAsImpl.hpp:32:65: note: template argument deduction/substitution failed:
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantAsImpl.hpp: In substitution of 'template typename ArduinoJson6170_91::enable_if<ArduinoJson6170_91::IsWriteableString< >::value, T>::type ArduinoJson6170_91::variantAs(const ArduinoJson6170_91::VariantData*) [with T = ArduinoJson6170_91::ObjectRef]':
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantRef.hpp:362:30: required from 'ArduinoJson6170_91::VariantConstRef::operator T() const [with T = ArduinoJson6170_91::ObjectRef]'
    .pio/libdeps/senseo-wifi/Homie@src-0c5d0d687d7f69195d2d563c4c8249b9/src/Homie/Utils/Validation.cpp:374:84: required from here
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantAsImpl.hpp:32:65: error: no type named 'type' in 'struct ArduinoJson6170_91::enable_if<false, ArduinoJson6170_91::ObjectRef>'
    *** [.pio/build/senseo-wifi/lib74e/Homie@src-0c5d0d687d7f69195d2d563c4c8249b9/Homie/Config.cpp.o] Error 1
    *** [.pio/build/senseo-wifi/lib74e/Homie@src-0c5d0d687d7f69195d2d563c4c8249b9/Homie/Utils/Validation.cpp.o] Error 1
    In file included from .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Numbers/FloatTraits.hpp:14:0,
    from .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Numbers/convertNumber.hpp:18,
    from .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/VariantData.hpp:9,
    from .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Variant/SlotFunctions.hpp:8,
    from .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Array/ArrayIterator.hpp:7,
    from .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Array/ArrayRef.hpp:8,
    from .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson.hpp:17,
    from .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson.h:9,
    from .pio/libdeps/senseo-wifi/Homie@src-0c5d0d687d7f69195d2d563c4c8249b9/src/Homie/Boot/BootConfig.hpp:21,
    from .pio/libdeps/senseo-wifi/Homie@src-0c5d0d687d7f69195d2d563c4c8249b9/src/Homie/Boot/BootConfig.cpp:1:
    .pio/libdeps/senseo-wifi/ArduinoJson/src/ArduinoJson/Numbers/FloatTraits.hpp:175:5: error: factors causes a section type conflict with __c
    ARDUINOJSON_DEFINE_STATIC_ARRAY(
    ^
    In file included from /home/muchtkutte/.platformio/packages/framework-arduinoespressif8266/cores/esp8266/Arduino.h:259:0,
    from .pio/libdeps/senseo-wifi/Homie@src-0c5d0d687d7f69195d2d563c4c8249b9/src/Homie/Boot/BootConfig.hpp:3,
    from .pio/libdeps/senseo-wifi/Homie@src-0c5d0d687d7f69195d2d563c4c8249b9/src/Homie/Boot/BootConfig.cpp:1:
    /home/muchtkutte/.platformio/packages/framework-arduinoespressif8266/cores/esp8266/pgmspace.h:16:51: note: '__c' was declared here
    #define PSTR(s) (extension({static const char __c[] PROGMEM = (s); &__c[0];}))
    ^
    /home/muchtkutte/.platformio/packages/framework-arduinoespressif8266/cores/esp8266/WString.h:38:76: note: in definition of macro 'FPSTR'
    #define FPSTR(pstr_pointer) (reinterpret_cast<const __FlashStringHelper *>(pstr_pointer))
    ^
    /home/muchtkutte/.platformio/packages/framework-arduinoespressif8266/cores/esp8266/WString.h:39:34: note: in expansion of macro 'PSTR'
    #define F(string_literal) (FPSTR(PSTR(string_literal)))
    ^
    .pio/libdeps/senseo-wifi/Homie@src-0c5d0d687d7f69195d2d563c4c8249b9/src/Homie/Boot/BootConfig.cpp:456:37: note: in expansion of macro 'F'
    Interface::get().getLogger() << F("Request is to large to be processed.") << endl;
    ^
    *** [.pio/build/senseo-wifi/lib74e/Homie@src-0c5d0d687d7f69195d2d563c4c8249b9/Homie/Boot/BootConfig.cpp.o] Error 1
    ==================================================================================== [FAILED] Took 4.28 seconds ====================================================================================
    Der Terminalprozess "platformio 'run'" wurde mit folgendem Exitcode beendet: 1.

Das Terminal wird von Aufgaben wiederverwendet, drücken Sie zum Schließen eine beliebige Taste.
`

Hat jemand 'ne Idee wo es klemmen könnte!?

MfG

Out of water when Brewing

Hello,

nice project, I made my own PCB and it works almost correct.
I have an 7863 machine. When the machine is brewing it gives me the out of water alert.

I think I have to adjust the static "const int pulseDurLedSlow = 1000;" to "static const int pulseDurLedSlow = 2000;"
My machine blinks once every 2 seconds when its heating or brewing.

I am unable to see how many blinks the machine does when "out of water"
How can I enable: // Measure your timings by activating debugging in ledChangedRoutine()

Greetz Michel

Homebridge?

Hi,
i really would like to get my Senso in Homekit by unsing Homebridge.
Is this possible? Could somebody help me with this?

Existing Homebridge is running and Hardware modifications are not a problem. Software is the part i am bad at :-)

Implementing in Home Assistant

Everything in this project has been new for me, soldering, ordering a custom PCB, dealing with firmware. I am now at the point that i'm trying to implement it into Home Assistant. It is connected to the Wifi and to the MQTT broker.
I just don't know how to "translate" the OpenHAB config to Home Assistant. Is there any example available that I can see?

Debug options

Hello,
After over a year and hundreds of successful brews, my SenseoWifi does not connect to the MQTT broker, but it does connect to the WLAN.

What are my debugging options?
Is there, as with ESPHome, the possibility to view a log via WLAN?
Or a web gui? My portscans were not successful....

Kind regards
Sören

test environment starts to beep immediately after flash

Hi

I just rebuild your project. Right after flashing the buzzer starts to beep quiet annoying. Of corse I want to test the board before I start to integrate it into the Senseo. That's why I connect 5V and GND only to start WiFi. Although there is WiFi showing up now and I got it configured (no idea why it did not used the config.json besides), there unfortunately is this noisy beep again. Perhaps it's just my confused, deaf ears for the moment, but right now I'm kind of clueless what this thing wants to tell me...

Suggestions? Anyone?

Thanks!

Regards
Vince

TCRT5000 disable

the project is very good and I have implemented everything except the TCRT5000 sensor.
How can I turn this off in the firmware?

Deprecate the `recipe` feature, anyone out there using it?

Hey all,

I was thinking about removing the recipe feature from the source code. It was always a bit hard to understand by people (me not properly describing it in README doesn't help) and its functionality was always a bit ambiguous. I didn't really use it myself as I was lacking the last bit of control over it. Additionally the whole thing bloats source code and is responsible for one known bug #3.

I've recently implemented the same function in Home Assistant. By moving this higher level complexity out of the machine you get more clarity and its easier to tweak details. Building the automation was quite easy and the automation code can be found here: https://github.com/ThomDietrich/SenseoWifi#home-assistant-configuration-example

I am planning to remove recipe from the source code. Let me know what you think.

TCRT5000 switched

Hi there

I wired everything with a TCRT5000 connected to the "main" board. Funny thing is, that without cup both leds on the TCRT are on and the MQTT subscription says
(...)/cupAvailable true

Now when I put a cup in place, the LED on the A0 side turns off and MQTT reports
(...)/cupAvailable false

Now shouldn't be that the other way around (at least the MQTT reporting)?

publishes to MQTT but does not receive

I'm using home-assistant's embedded MQTT broker. The esp8266 publishes topics like opState and debug, but doesn't receive any commands. My Tasmota devices receive commands via MQTT jut fine.
Publishing foo to devices/senseo-wifi/machine/power should result in an output on devices/senseo-wifi/machine/debug, but doesn't do anything.
How can I debug this?

TCRT5000 @ DIN

Hello everybody,

The TCRT5000 module is working with 5V and gives back a 5V TTL and an analog signal up to 5V.
The WeMos D1 mini input voltage level should be 3.3V for DIN or AIN.

Why can we do this, without destroying the inputs at the WeMOS?

Entities not available in home assistant

Hello Sir,

yesterday i updated my senseo with the latest firmware, now i have the following problem.

when i boot my senseo it works very good, but after +- 5 minutes al my senseo entities become unavailable in home assistant. The mqtt topics wont get updated anymore.

Is it just me or does someone else has the same problem?

sorry for my bad english🤭

Second try :)

Hey! I'm back :) After almost 2 years, I want to give it another try. Printing the PCB online was a bit daunting, so I want to give it a try with a protoboard. I do have a few questions though (forgive me for the dumb one)

  • What are the resistors for? Can't you just connect the side of the octocoupler that emit light directly to an out pin of the ESP?
  • I understand from the schematic what side of the octocoupler should be connected toward the ESP and which should be toward the Senseo, but I have no idea how to know what is what from the actual piece of hardware. Is there any convention to know which part emits light and which part receive them?
  • I ordered a HLK-PM01, but it seems tricky to use. I dig a bit on the internet and it seems to involve using fuse (https://randomnerdtutorials.com/esp8266-hi-link-hlk-pm03/) and I'm not very comfortable soldering a custom PCB for 220v (and it seems the pin of the HLK doesn't want to fit into any of my protoboard anyway). Can you update the reference of the step-down converter you use? (the link on eBay is broken)

The last thing is more of a suggestion. Have you considered to hack the buttons directly into the ESP to add nice behavior like:

  • Pressing the cup button could trigger the full brewing cycle. (Turn on, wait for warm up, brewing, turn off)
  • A long press of the cup button could turn on a mqtt switch that would be used by home assistant (or your favorite automation) to program a coffee for the next morning
  • A long press of the main button could reset your firmware (no need for an extra button)
  • Requesting a coffee with no cup present could be rejected and trigger a sound from the buzzer

what plug to power this

Hi

Sorry for the maybe dumb question, but looking at the board layout, the used pins and comparing lab plus final pictures of yours...
What plug(s) are responsible for powering (5V and GND) this board?
Do you power it solely by USB?
And if so: Did you connect that USB directly to the 220V to 5V AC-DC step down module?

Thanks!

Regards
Vince

Compatibility question

Hi, would love to test this modification on my Sensei Switch HD6594/60. Do you think it might work? Mostly the electronics / schematis are needed to work. If code needs adjusting I might hopefully figure those out.

Wiring help

Perhaps i'm the stupid here. But finally received all components and started soldering today.
But, it's unlcear to me how to wire this whole thing up! :/
Can someone be of any help? Thx

List of hardware

Maybe (probably) I am an idiot, but where can I get my hands on a compatible PCB? I am not unfamiliar with flashing and soldering, however I am unfamiliar with custom PCBS.

Is it possible to provide the list of requirements and include one or more examples where to get the hardware?

I am located in The Netherlands by the way.

Problem beim compelieren

Hello I try the d1zu flashing but without success he has problems with the firmware

_-----------------------
GED_FW_NAME, __FLAGGED_FW_VERSION);

                                                                                             ^
src \ SenseoWifi.cpp: 352: 3: note: in expansion of macro 'Homie_setFirmware'
   Homie_setFirmware ("senseo-wifi-wemos", senseoWifiFWVersion);
   ^
*** [.pio \ build \ d1_mini \ src \ SenseoWifi.cpp.o] Error 1

I'm not getting anywhere, there is a tip for me here

current on the buttons

Hi...

I tried to get this project finally done and everything is now build in the Senseo:

  • MQTT nicely reports the readings

  • MQTT readings instantly update themselves when you send a MQTT command or

  • MQTT readings instantly update themselves when press a button on the Senseo

But:

  • a MQTT send "power" to the board reports that Senseo is powered, but it won't turn on (harware button works of course)

  • strangely all buttons on the board (TP, T1, T2) allways have current of exactly 5.08 volts (no matter if MQTT says they are on or not) (I expected something like 0 volts when it's turned off)

By any chance you can't push me in the right direction what to check first?

Thanks!

Regards
Vince

senseo-wifi.map is missed

Hi,
really nice project.
May I ask you for the file "senseo-wifi.map"? It is mentioned in your openhab code.
String KU_Senseo_OutOfWater "OutOfWater" {channel="mqtt:topic:SenseoWiFi:OutOfWater" [profile="transform:MAP", function="senseo-wifi.map"]}

Further I like to ask you if you tried to combine your project with Alexa?
How did you proceed?

Thanks.

Replace TCRT5000?

Hi!
Just found your project and it's really amazing.
Will order some PCBs right now.
But one question: is it possible to replace the TCRT5000 with another sensor? I'd really like to use the cup detection, but don't want to cut a hole in the Senseo's housing.
Best regards,
Oliver

Needs: platform = [email protected]

Got the following error:

✔ MQTT ready
Triggering MQTT_READY event...
Calling setup function...
ISR not in IRAM!
Abort called

>>>stack>>>
ctx: cont
sp: 3ffffce0 end: 3fffffc0 offset: 01b0
3ffffe90:  000000f4 00000001 3ffe86a9 00000001
3ffffea0:  3ffefa60 000001f4 0000000f 3fff0f60
3ffffeb0:  3ffefa60 3ffef5e0 3ffef3c8 40100932
3ffffec0:  3ffefa60 3ffef8b4 3ffef3c8 402015b2
3ffffed0:  3ffefa60 3ffef5e0 3ffef5e0 4020d6b0
3ffffee0:  4026099d 0000002e 3fff0f9c 40227d44
3ffffef0:  00000000 3ffef5e0 00000018 3fff0f60
3fffff00:  3ffefa60 3ffef5e0 3ffef3c8 402278aa
3fffff10:  3fff00cc 000003bd 3ffef3c8 401000c5
3fffff20:  3ffefa60 3ffef5e0 3ffef3c8 402085f9
3fffff30:  3fff00a8 00000000 0000000f 402315f6
3fffff40:  3fff2470 00000000 3fff04e8 40220dfd
3fffff50:  3ffef2ec 00000000 3fff246c 40227904
3fffff60:  3ffef32c 00000000 3fff246c 402129df
3fffff70:  3fff2484 40231636 40220dc0 3ffefe3c
3fffff80:  3fffdad0 00000000 3ffef5b8 4020283a
3fffff90:  00000000 00000000 3ffefe0c 40202350
3fffffa0:  3fffdad0 00000000 3ffefe0c 4020fdf8
3fffffb0:  feefeffe feefeffe 3ffe859c 40100c05
<<<stack<<<

 ets Jan  8 2013,rst cause:2, boot mode:(3,6)

load 0x4010f000, len 1384, room 16
tail 8
chksum 0x2d
csum 0x2d
v8b899c12
~ld

as described here this needs to be fixed with:
platform = [email protected]
in platformio.ini (for now)

OTA update

I've tried a few times to update OTA, but I never got it to work. What am I missing here?
In Visual Studio Code I changed the ip, username, password and the senseo name in de platformio.ini file.
added "upload_port = 192.168.xx.xx"
added "build_dir = mybuildfiles"
changed the file location from "$BUILD_DIR/firmware.bin" to ".pio/build/senseo-wifi/firmware.bin"
Uploading goes a long way and seems to work for the most part but ends with:

Traceback (most recent call last):
  File "D:\Projecten\Home Assistant\Wifi Senseo\SenseoWifi-master 9 nov\SenseoWifi-master\ota_updater_202011.py", line 4, in <module>
    import paho.mqtt.client as mqtt
ModuleNotFoundError: No module named 'paho'
*** [upload] Error 1

openHAB - dozens of items

Hi

Do you mind to please...

  • share your dozens of openHAB items
  • explain a little how you did the binding and
  • of course how you did the Amazon Alexa Echo implementation?

Thanks in advance!

Regards
Vince

Similar PCB for a smart coffee machine , any coffee machine

The repo below contains the KiCad files for a Home/office/small business Automation Smart Coffee Machine Addon.

https://github.com/aeonSolutions/AeonLabs-Home-Automation-Smart-Coffee-MAchine-Addon

. The PCB uses a ESP32-S3-WROOM1 packed with Bluetooth, BLE and WiFi ready to be programmed for Home Assistant or zigbee ! . Easy installation on any home or office coffee machine.

This Addon Enables any vintage coffee machine to be connected to the internet (or only to a personal network). Can connect with any Computer, Mobile App or Home Assistant (home automaton).

Functionalities available:
Control water temperature;
Low water detection in the water tank;
Order a cup of coffee (with possibility control of quantity of coffee in the cup);
Grind coffee beans.;
Connect to a Nextion LCD Touch ;
RGB LED;
Magnetic Buzzer;

To all those looking for a LCD touch solutions, this PCB features a connection to NEXTION LCD panels so one car order a cup of coffee using the LCD Touch.

This PCB can be powered using 220V AC or regular 5V DC.

Control of the coffee machine is made using a 220V relays or alternatively any other 3.3V switch.

Great to do a restoration with this smart PCB add-on on any vintage coffee machine.

Configuration example for OH 2.4.0

Hey,
after some hours of configuration I'd like to share my config-files for your convinience:

mqtt.things

Bridge mqtt:systemBroker:LocalBroker [ host="your-broker-ip", secure=false ]
{
    Thing mqtt:topic:SenseoWiFi {
    Channels:
        Type string : Debug           "Debug"               [stateTopic="devices/senseo-wifi-home/machine/debug"]
        Type string : OpState         "Zustand"             [stateTopic="devices/senseo-wifi-home/machine/opState"]
        Type switch : OnOff           "OnOff"               [stateTopic="devices/senseo-wifi-home/machine/power", commandTopic="devices/senseo-wifi-home/machine/power/set", on="ON", off="OFF"]
        Type string : Brew            "Brew"                [stateTopic="devices/senseo-wifi-home/machine/brew",commandTopic="devices/senseo-wifi-home/machine/brew/set"]
        Type number : BrewedSize      "BrewedSize"          [stateTopic="devices/senseo-wifi-home/machine/brewedSize"]
        Type string : OutOfWater      "OutOfWater"          [stateTopic="devices/senseo-wifi-home/machine/outOfWater"]
        Type string : Recipe          "Recipe"              [stateTopic="devices/senseo-wifi-home/machine/recipe",commandTopic="devices/senseo-wifi-home/machine/recipe/set"]
        Type string : CupAvailable    "Tasse vorh."         [stateTopic="devices/senseo-wifi-home/machine/cupAvailable"]
        Type string : CupFull         "Tasse voll"          [stateTopic="devices/senseo-wifi-home/machine/cupFull"]
        Type string : Online          "Online"              [stateTopic="devices/senseo-wifi-home/$online"]
    }
}

SenseoWifi.items:

String KU_Senseo_Debug         "Debug [%s]"                          {channel="mqtt:topic:SenseoWiFi:Debug", expire="10s"}
String KU_Senseo_OpState       "Zustand [MAP(senseo-wifi.map):%s]"   {channel="mqtt:topic:SenseoWiFi:OpState"}
Switch KU_Senseo_OnOff         "OnOff"                               {channel="mqtt:topic:SenseoWiFi:OnOff"}
String KU_Senseo_Brew          "Brew"                                {channel="mqtt:topic:SenseoWiFi:Brew"}
Number KU_Senseo_BrewedSize    "BrewedSize"                          {channel="mqtt:topic:SenseoWiFi:BrewedSize"}
String KU_Senseo_OutOfWater    "OutOfWater"                          {channel="mqtt:topic:SenseoWiFi:OutOfWater" [profile="transform:MAP", function="senseo-wifi.map"]}
String KU_Senseo_Recipe        "Recipe"                              {channel="mqtt:topic:SenseoWiFi:Recipe"}
String KU_Senseo_CupAvailable  "Tasse vorh."                         {channel="mqtt:topic:SenseoWiFi:CupAvailable" [profile="transform:MAP", function="senseo-wifi.map"]}
String KU_Senseo_CupFull       "Tasse voll"                          {channel="mqtt:topic:SenseoWiFi:CupFull" [profile="transform:MAP", function="senseo-wifi.map"]}
String KU_Senseo_Online        "Online"                              {channel="mqtt:topic:SenseoWiFi:Online"}

SenseoWifi.sitemap

sitemap SenseoWifi label="Senseo-Tests"
{
    Frame label="Status" {
        //Text item=KU_Senseo_Unreach label="Fehler [Maschine nicht verfügbar!]" visibility=[KU_Senseo_Online == "false"] valuecolor=["true"="red"]
        Text item=KU_Senseo_OpState label="Aktueller Zustand"
        Text item=KU_Senseo_OutOfWater label="Wassertank [Leer]" visibility=[KU_Senseo_OpState == SENSEO_NOWATER] valuecolor=[ON="maroon"] icon="water"
        Switch item=KU_Senseo_CupAvailable label="Tasse vorhanden"
        Switch item=KU_Senseo_CupFull label="Tasse voll" visibility=[KU_Senseo_CupAvailable == ON]
    }
    Frame label="Steuerung" {
        Switch item=KU_Senseo_OnOff label="Ein-/Ausschalten"
        Switch item=KU_Senseo_Brew label="Kaffee Kochen" mappings=[1cup="☕", 2cup="☕☕"]
    }
}

Please be aware:

  • Conversion of string-states "true"&"false" is a bit rude i think.
  • There also have only been some basic testing because my hardware is not in place yet.
  • Rules have not been implemented

Suggestions are welcome.

@ThomDietrich could you maybe comment or even add to readme?

Cup Full Logic

Now that I added the full cup reminder automation I noticed that the full cup state isn't correct all the time.
I think the currect logic (correct me if i'm wrong) is that "Full cup" sets to true when brewing is done.
And "Full cup" goes to false when the cup is removed.
The logic for the brewing state is that it sets the state to brewing when brewing is started, waits untill heating is done and then changes state to ready.
If this is correct this means that if you remove the cup before brewing is finished (which happens almost every time), that the full cup status change will happen after removing the cup. That way there won't be a trigger to change that back to empty because the cup is allready gone.

I think it would be more usefull to set cup full to true when brewing is started, but only when there is a cup available, that way there is allways a cup to remove and set the state back to cup empty again.

einbindung im iobrocker

Hallo zusammen ,
ich möchte mich bei Thomas Bedanken für die Platine und die hilfe bei der Kompelierung

da ich den iobrocker als smarthomezentrale nutze habe ich mir ein blockly script gemacht um die kaffemaschiene via alexa auch anzusteuern

hier erst einmal das script selbst

<xml xmlns="https://developers.google.com/blockly/xml">
  <block type="on" id=":tKFC7{i^_z~*f@]FM/6" x="88" y="67">
    <field name="OID">0_userdata.0.Kaffe</field>
    <field name="CONDITION">ne</field>
    <field name="ACK_CONDITION"></field>
    <statement name="STATEMENT">
      <block type="controls_if" id="@4da8+G1gocm1o-xyJQ:">
        <value name="IF0">
          <block type="logic_compare" id="%:#wI=a%(V4At8qa86N7">
            <field name="OP">EQ</field>
            <value name="A">
              <block type="get_value" id="S?%%m%*qZeT+OZrlRw7C">
                <field name="ATTR">val</field>
                <field name="OID">0_userdata.0.Kaffe</field>
              </block>
            </value>
            <value name="B">
              <block type="logic_boolean" id="!wB2kNZ0jepw?BN{Yax^">
                <field name="BOOL">TRUE</field>
              </block>
            </value>
          </block>
        </value>
        <statement name="DO0">
          <block type="control" id="K_KnE$};v:IUH(KO-j/t">
            <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
            <field name="OID">mqtt.0.homie.ecfabc58a2e4.machine.power.set</field>
            <field name="WITH_DELAY">FALSE</field>
            <value name="VALUE">
              <block type="text" id="..i4;OBa9)%m4XX5]=#a">
                <field name="TEXT">true</field>
              </block>
            </value>
            <next>
              <block type="controls_if" id="%=o27YD4dG=8d~aRrH2S" disabled="true">
                <value name="IF0">
                  <block type="logic_compare" id="YBjf-q(O@A;dg:~%mMVv">
                    <field name="OP">EQ</field>
                    <value name="A">
                      <block type="get_value" id="rBh%r{mN-APBpF~M?#8]">
                        <field name="ATTR">val</field>
                        <field name="OID">mqtt.0.homie.ecfabc58a2e4.machine.opState</field>
                      </block>
                    </value>
                    <value name="B">
                      <block type="text" id="c|:ZU(p3k35wloog,e#2">
                        <field name="TEXT">SENSEO_READY</field>
                      </block>
                    </value>
                  </block>
                </value>
                <statement name="DO0">
                  <block type="control" id="LPFW*QKvPaMp4L[nUuwl">
                    <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                    <field name="OID">mqtt.0.homie.ecfabc58a2e4.machine.brew.set</field>
                    <field name="WITH_DELAY">FALSE</field>
                    <value name="VALUE">
                      <block type="text" id="sTv^lcL{];_~^/l_;Rl:">
                        <field name="TEXT">1cup</field>
                      </block>
                    </value>
                    <next>
                      <block type="control" id="E%YI*GT@Tx_I5TRP./%y">
                        <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation>
                        <field name="OID">mqtt.0.homie.ecfabc58a2e4.machine.power.set</field>
                        <field name="WITH_DELAY">TRUE</field>
                        <field name="DELAY_MS">25</field>
                        <field name="UNIT">sec</field>
                        <field name="CLEAR_RUNNING">FALSE</field>
                        <value name="VALUE">
                          <block type="text" id="rL:$UA=}L5L({%7%?Y]@">
                            <field name="TEXT">false</field>
                          </block>
                        </value>
                      </block>
                    </next>
                  </block>
                </statement>
              </block>
            </next>
          </block>
        </statement>
      </block>
    </statement>
    <next>
      <block type="on" id="Rrzgb|a%e^fo{jAK]A!5">
        <field name="OID">mqtt.0.homie.ecfabc58a2e4.machine.opState</field>
        <field name="CONDITION">any</field>
        <field name="ACK_CONDITION"></field>
        <statement name="STATEMENT">
          <block type="controls_if" id="e8nVJ[o5BUOhzPP[]%Y?">
            <value name="IF0">
              <block type="logic_compare" id="B}X}l%Wp7tF$$RAT(?1y">
                <field name="OP">EQ</field>
                <value name="A">
                  <block type="get_value" id="YmqMVoG.I`A8dO=?;q.K">
                    <field name="ATTR">val</field>
                    <field name="OID">mqtt.0.homie.ecfabc58a2e4.machine.opState</field>
                  </block>
                </value>
                <value name="B">
                  <block type="text" id="[mPJ~:BJz6paU{yo7GoI">
                    <field name="TEXT">SENSEO_READY</field>
                  </block>
                </value>
              </block>
            </value>
            <statement name="DO0">
              <block type="control" id="#^P)*J%lz*yIcMD{`wMh">
                <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                <field name="OID">mqtt.0.homie.ecfabc58a2e4.machine.brew.set</field>
                <field name="WITH_DELAY">FALSE</field>
                <value name="VALUE">
                  <block type="text" id="h-If!Y*KB!;MXY#{^hCY">
                    <field name="TEXT">1cup</field>
                  </block>
                </value>
                <next>
                  <block type="control" id="Kn|{/:=COL%}?dl9,vY1">
                    <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation>
                    <field name="OID">mqtt.0.homie.ecfabc58a2e4.machine.brew.set</field>
                    <field name="WITH_DELAY">TRUE</field>
                    <field name="DELAY_MS">1000</field>
                    <field name="UNIT">ms</field>
                    <field name="CLEAR_RUNNING">FALSE</field>
                    <value name="VALUE">
                      <block type="text" id="th#`N)o}{}mC`:jZ-_m(">
                        <field name="TEXT">1</field>
                      </block>
                    </value>
                    <next>
                      <block type="control" id="Wcs)tF~yEbh;5jE=|o((">
                        <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation>
                        <field name="OID">mqtt.0.homie.ecfabc58a2e4.machine.power.set</field>
                        <field name="WITH_DELAY">TRUE</field>
                        <field name="DELAY_MS">25</field>
                        <field name="UNIT">sec</field>
                        <field name="CLEAR_RUNNING">FALSE</field>
                        <value name="VALUE">
                          <block type="text" id="9`Mo4,3F{xyN#(5ONX.e">
                            <field name="TEXT">false</field>
                          </block>
                        </value>
                        <next>
                          <block type="control" id="d7N#iIArvSbT_/GkX792">
                            <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation>
                            <field name="OID">0_userdata.0.Kaffe</field>
                            <field name="WITH_DELAY">TRUE</field>
                            <field name="DELAY_MS">30</field>
                            <field name="UNIT">sec</field>
                            <field name="CLEAR_RUNNING">FALSE</field>
                            <value name="VALUE">
                              <block type="logic_boolean" id="xcd9qNkqVC$Z;1;_ZiT!">
                                <field name="BOOL">FALSE</field>
                              </block>
                            </value>
                          </block>
                        </next>
                      </block>
                    </next>
                  </block>
                </next>
              </block>
            </statement>
          </block>
        </statement>
        <next>
          <block type="on" id="E3]p7a7blX~E0.JJi|Z*">
            <field name="OID">mqtt.0.homie.ecfabc58a2e4.machine.opState</field>
            <field name="CONDITION">any</field>
            <field name="ACK_CONDITION"></field>
            <statement name="STATEMENT">
              <block type="controls_if" id="[W!p.UL[*i76zmh.U@K=">
                <value name="IF0">
                  <block type="logic_compare" id="lnedI*zuB|^!k;SlD~?w">
                    <field name="OP">EQ</field>
                    <value name="A">
                      <block type="get_value" id="0Qo]c6$n,O)i#kc?chZ$">
                        <field name="ATTR">val</field>
                        <field name="OID">mqtt.0.homie.ecfabc58a2e4.machine.opState</field>
                      </block>
                    </value>
                    <value name="B">
                      <block type="text" id="wCq1:}-Rm8!3-rKo0(dI">
                        <field name="TEXT">SENSEO_NOWATER</field>
                      </block>
                    </value>
                  </block>
                </value>
                <statement name="DO0">
                  <block type="control" id="HF$Dj}YQ6lx[LP@h0G{2">
                    <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                    <field name="OID">alexa2.0.Echo-Devices.G000MW04748407UG.Commands.speak</field>
                    <field name="WITH_DELAY">FALSE</field>
                    <value name="VALUE">
                      <block type="text" id="8S$CUVJmqp)kv8rNAIL0">
                        <field name="TEXT">Bitte Senseo Wassertank nachfüllen ,Wasser ist leer</field>
                      </block>
                    </value>
                    <next>
                      <block type="control" id="|0)KP[?fQh|BO}8zOi}q">
                        <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation>
                        <field name="OID">0_userdata.0.Kaffe</field>
                        <field name="WITH_DELAY">TRUE</field>
                        <field name="DELAY_MS">30</field>
                        <field name="UNIT">sec</field>
                        <field name="CLEAR_RUNNING">FALSE</field>
                        <value name="VALUE">
                          <block type="logic_boolean" id="{Es7??vlfwbhb;@cyS0h">
                            <field name="BOOL">FALSE</field>
                          </block>
                        </value>
                      </block>
                    </next>
                  </block>
                </statement>
              </block>
            </statement>
          </block>
        </next>
      </block>
    </next>
  </block>
</xml>

des weiteren müsst ihr bei objekten ein virtuellen switch anlegen und diesen mittels iot in alexa intigrieren

und im link auf eure id´s alles abändern .

dann geräte suchen . dann findet alexa den virtuellen switch

und hier könnt ihr dann in alexa eine routine anlegen !

kleine infomation noch dazu

wenn die senseo manuell an den tasten bedind wird .

sollte wasser und ped bereits innen liegen da das script direkt nach fertigung des heizens auch startet zu brühen
desweiteren habe ich im script das wenn der wassertank leer ist alexa in der küche mir das auch sagt

folgen wird noch der ped zähler und die infomationsübertragung an telegram

für weitere fragen einfach schreiben

lg aus nürnberg

PullUp @ D7

Hello everybody,
shouldn't there be a pullup resistor @ D7?

Stop brewing if cup is removed

I tried out what happens if the cup is removed while coffee is brewed.
(Maybe cup falls of ore someone is in hurry.. ;-) )

Maybe someone can implement a feature that switches the machine off in such cases?

warning while compiling - SENSEO_unknown not handled...

Hi

Found something odd while compiling the code:

Compiling .pioenvs\d1_mini\libcd1\ESP8266WiFi\ESP8266WiFi.cpp.o
src\SenseoWifi.cpp: In function 'void senseoStateExitAction()':
src\SenseoWifi.cpp:126:10: warning: enumeration value 'SENSEO_unknown' not handled in switch [-Wswitch]
switch (mySenseoSM.getStatePrev()) {
^
src\SenseoWifi.cpp: In function 'void senseoStateEntryAction()':

src\SenseoWifi.cpp:198:10: warning: enumeration value 'SENSEO_unknown' not handled in switch [-Wswitch]
switch (mySenseoSM.getState()) {
^
In file included from .piolibdeps\Homie\src/Homie.h:4:0,
from src\SenseoWifi.cpp:7:
src\SenseoWifi.cpp: In function 'void setup()':
.piolibdeps\Homie\src/Homie.hpp:27:214: warning: statement has no effect [-Wunused-value]
#define Homie_setFirmware(name, version) const char* __FLAGGED_FW_NAME = "\xbf\x84\xe4\x13\x54" name "\x93\x44\x6b\xa7\x75"; const 
char* __FLAGGED_FW_VERSION = "\x6a\x3f\x3e\x0e\xe1" version "\xb0\x30\x48\xd4\x1a"; Homie.__setFirmware(__FLAGGED_FW_NAME, __FLAGGE
D_FW_VERSION);
^
src\SenseoWifi.cpp:352:3: note: in expansion of macro 'Homie_setFirmware'
Homie_setFirmware("senseo-wifi-wemos", senseoWifiFWVersion);

Some warnings are not an error, but strange enough...

Regards
Vince

It's probably quite the challenge

I actually found about this project today, and I totally want to try that :)

I'm new to the electronic part of the project, so it's probably going to be quite a challenge. The end game for me would be to interface it with home assistant, probably through ESPHome. But I might play with your firmware instead, we'll see once I get here :)

I do have questions, though :) It would seem you have a 1.8 version of your pcb but the gerber export doesn't seem to exist for the 1.8. Am I missing something?
For the component parts, I found a PC817X3NSZ9F but it's not clear to me if it's equivalent to the PC817 you prescribe or if it's a totally different model.

Thanks for this project! :)

Originally posted by @Pierre-33 in #42 (comment)

Compile failing

I'm trying to compile the code in VisualStudioCode woth PlatformIO. Unfortunately the build failes with a lot off errors regarding Homie.
Knipsel

I'm just getting started with VSC/PIO, these are the steps I did to get to the failing point:

  • Downloaded zip file with GitHub SenseoWifi code
  • Unzipped and opened SenseoWifi-master folder in VSC
  • Installed a bunch of libraries in PIO:
    *** ArduinoJSON...
    *** AsyncMqttClient
    *** AsyncTCP
    *** Bounce2
  • Compile with PlatformIO in VSC

UPDATE: On second look it's pretty obvious ArduinoJson had to be version 5. Uninstalled version 6 and the issue was resolved. Code is now compiling sccesfully.

Build endet mit Abhängigkeitsfehlern

Hallo ThomDietrich,

du hast ein tolles Projekt hier, das ich unbedingt nachbauen wollte.
Leider habe ich nicht ganz so tiefe Programmierkenntnisse, habe aber deine Anleitung Schritt für Schritt durchgearbeitet.

Wenn ich im VS Code den Build über PlatformIO starte, kommt folgender Fehler.
Ich habe keine Ahnung, warum die Abhängigkeiten der Libraries nicht richtig aufgelöst werden... habe alles versucht und bin am Verzweifeln. Was mache ich falsch?

Executing task in folder SenseoWifi: C:\Users\HP.platformio\penv\Scripts\platformio.exe run <

Processing senseo-wifi (platform: espressif8266; board: d1_mini; framework: arduino)

Verbose mode can be enabled via -v, --verbose option
CONFIGURATION: https://docs.platformio.org/page/boards/espressif8266/d1_mini.html
PLATFORM: Espressif 8266 2.6.2 > WeMos D1 R2 and mini
HARDWARE: ESP8266 80MHz, 80KB RAM, 4MB Flash
PACKAGES:

  • framework-arduinoespressif8266 3.20704.0 (2.7.4)
  • tool-esptool 1.413.0 (4.13)
  • tool-esptoolpy 1.20800.0 (2.8.0)
  • toolchain-xtensa 2.40802.200502 (4.8.2)
    LDF: Library Dependency Finder -> http://bit.ly/configure-pio-ldf
    LDF Modes: Finder ~ chain, Compatibility ~ soft
    LibraryManager: Installing homie-esp8266
    git version 2.28.0.windows.1
    Cloning into 'C:\Users\HP\Documents\Arduino\SenseoWifi.pio\libdeps\senseo-wifi_tmp_installing-rc1c2hz6-package'...
    HEAD is now at cfb3346 Fix mentions of develop-v3 branch (#658)
    Homie @ cfb3346 has been successfully installed!
    Installing dependencies
    Looking for ArduinoJson library in registry
    Found: https://platformio.org/lib/show/64/ArduinoJson
    LibraryManager: Installing id=64 @ ^6.11.4
    Using cache: C:\Users\HP.platformio.cache\4f\ad2aa21b2ac287f82c72bba98a5ef04f

Unpacking [############------------------------] 35%
Unpacking [#############-----------------------] 36%
Unpacking [#############-----------------------] 37%
Unpacking [#############-----------------------] 38%
Unpacking [##############----------------------] 38%
Unpacking [##############----------------------] 39%
Unpacking [##############----------------------] 40%
Unpacking [##############----------------------] 41%
Unpacking [###############---------------------] 41%
Unpacking [###############---------------------] 42%
Unpacking [###############---------------------] 43%
Unpacking [################--------------------] 44%
Unpacking [################--------------------] 45%
Unpacking [################--------------------] 46%
Unpacking [#################-------------------] 47%
Unpacking [#################-------------------] 48%
Unpacking [#################-------------------] 49%
Unpacking [##################------------------] 50%
Unpacking [##################------------------] 51%
Unpacking [##################------------------] 52%
Unpacking [###################-----------------] 53%
Unpacking [###################-----------------] 54%
Unpacking [####################----------------] 55%
Unpacking [####################----------------] 56%
Unpacking [####################----------------] 57%
Unpacking [####################----------------] 58%
Unpacking [#####################---------------] 58%
Unpacking [#####################---------------] 59%
Unpacking [#####################---------------] 60%
Unpacking [######################--------------] 61%
Unpacking [######################--------------] 62%
Unpacking [######################--------------] 63%
Unpacking [#######################-------------] 64%
Unpacking [#######################-------------] 65%
Unpacking [#######################-------------] 66%
Unpacking [########################------------] 66%
Unpacking [########################------------] 67%
Unpacking [########################------------] 68%
Unpacking [########################------------] 69%
Unpacking [#########################-----------] 69%
Unpacking [#########################-----------] 70%
Unpacking [#########################-----------] 70% 00:00:00
Unpacking [#########################-----------] 71% 00:00:00
Unpacking [##########################----------] 72% 00:00:00
Unpacking [##########################----------] 73% 00:00:00
Unpacking [##########################----------] 74% 00:00:00
Unpacking [###########################---------] 75% 00:00:00
Unpacking [###########################---------] 76% 00:00:00
Unpacking [###########################---------] 77% 00:00:00
Unpacking [############################--------] 77% 00:00:00
Unpacking [############################--------] 78% 00:00:00
Unpacking [############################--------] 79% 00:00:00
Unpacking [############################--------] 80% 00:00:00
Unpacking [#############################-------] 80% 00:00:00
Unpacking [#############################-------] 81% 00:00:00
Unpacking [#############################-------] 82% 00:00:00
Unpacking [##############################------] 83% 00:00:00
Unpacking [##############################------] 84% 00:00:00
Unpacking [##############################------] 85% 00:00:00
Unpacking [###############################-----] 86% 00:00:00
Unpacking [###############################-----] 87% 00:00:00
Unpacking [###############################-----] 88% 00:00:00
Unpacking [################################----] 88% 00:00:00
Unpacking [################################----] 89% 00:00:00
Unpacking [################################----] 90% 00:00:00
Unpacking [################################----] 91% 00:00:00
Unpacking [#################################---] 91% 00:00:00
Unpacking [#################################---] 92% 00:00:00
Unpacking [#################################---] 93% 00:00:00
Unpacking [##################################--] 94% 00:00:00
Unpacking [##################################--] 95% 00:00:00
Unpacking [##################################--] 96% 00:00:00
Unpacking [###################################-] 97% 00:00:00
Unpacking [###################################-] 98% 00:00:00
Unpacking [###################################-] 99% 00:00:00
Unpacking [####################################] 100%
ArduinoJson @ 6.16.1 has been successfully installed!
Looking for AsyncMqttClient library in registry
Found: https://platformio.org/lib/show/346/AsyncMqttClient
LibraryManager: Installing id=346 @ ^0.8.0
Using cache: C:\Users\HP.platformio.cache\63\83f24bfe072da77a2676219044370a63

Unpacking [##################################--] 96%
Unpacking [###################################-] 98%
Unpacking [####################################] 100%
AsyncMqttClient @ 0.8.2 has been successfully installed!
Installing dependencies
Looking for ESPAsyncTCP library in registry
Found: https://platformio.org/lib/show/305/ESPAsyncTCP
LibraryManager: Installing id=305 @ 1.2.0
Using cache: C:\Users\HP.platformio.cache\d9\cbc13db98b326acd412892db90b8e7d9
ESPAsyncTCP @ 1.2.0 has been successfully installed!
Looking for AsyncTCP library in registry
Found: https://platformio.org/lib/show/1826/AsyncTCP
LibraryManager: Installing id=1826 @ ^1.0.0
Using cache: C:\Users\HP.platformio.cache\8f\74372f406cb2e549f3eb2773b739d38f
AsyncTCP @ 1.1.1 has been successfully installed!
Looking for Bounce2 library in registry
Found: https://platformio.org/lib/show/1106/Bounce2
LibraryManager: Installing id=1106 @ ^2.1.0
Using cache: C:\Users\HP.platformio.cache\4f\6ce5eb13ab365e3a90a49dc183d5194f

Unpacking [#################-------------------] 49%
Unpacking [##################------------------] 50%
Unpacking [##################------------------] 51%
Unpacking [##################------------------] 52%
Unpacking [###################-----------------] 53%
Unpacking [###################-----------------] 54%
Unpacking [####################----------------] 55%
Unpacking [####################----------------] 56%
Unpacking [####################----------------] 57%
Unpacking [#####################---------------] 58%
Unpacking [#####################---------------] 59%
Unpacking [#####################---------------] 60%
Unpacking [######################--------------] 61%
Unpacking [######################--------------] 62%
Unpacking [######################--------------] 63%
Unpacking [#######################-------------] 64%
Unpacking [#######################-------------] 65%
Unpacking [########################------------] 66%
Unpacking [########################------------] 67%
Unpacking [########################------------] 68%
Unpacking [########################------------] 69%
Unpacking [#########################-----------] 69%
Unpacking [#########################-----------] 70%
Unpacking [#########################-----------] 71%
Unpacking [##########################----------] 72%
Unpacking [##########################----------] 73%
Unpacking [##########################----------] 74%
Unpacking [###########################---------] 75%
Unpacking [###########################---------] 76%
Unpacking [############################--------] 77%
Unpacking [############################--------] 78%
Unpacking [############################--------] 79%
Unpacking [############################--------] 80%
Unpacking [#############################-------] 80%
Unpacking [#############################-------] 81%
Unpacking [#############################-------] 82%
Unpacking [##############################------] 83%
Unpacking [##############################------] 84%
Unpacking [##############################------] 85%
Unpacking [###############################-----] 86%
Unpacking [###############################-----] 87%
Unpacking [###############################-----] 88%
Unpacking [################################----] 88%
Unpacking [################################----] 89%
Unpacking [################################----] 90%
Unpacking [################################----] 91%
Unpacking [#################################---] 92%
Unpacking [#################################---] 93% 00:00:00
Unpacking [##################################--] 94% 00:00:00
Unpacking [##################################--] 95% 00:00:00
Unpacking [##################################--] 96% 00:00:00
Unpacking [###################################-] 97% 00:00:00
Unpacking [###################################-] 98% 00:00:00
Unpacking [###################################-] 99% 00:00:00
Unpacking [####################################] 100%
Bounce2 @ 2.55 has been successfully installed!
Looking for ESP Async WebServer library in registry
Found: https://platformio.org/lib/show/306/ESP Async WebServer
LibraryManager: Installing id=306
Using cache: C:\Users\HP.platformio.cache\1d\f4ff895b8eec29acc52f25215402c91d
ESP Async WebServer @ 1.2.3 has been successfully installed!
Installing dependencies
Looking for ESPAsyncTCP library in registry
Found: https://platformio.org/lib/show/305/ESPAsyncTCP
LibraryManager: Installing id=305
Using cache: C:\Users\HP.platformio.cache\3c\69ec8d45eebc4e13c137f6bf4cd5f53c
ESPAsyncTCP @ 1.2.2 has been successfully installed!
Looking for AsyncTCP library in registry
Found: https://platformio.org/lib/show/1826/AsyncTCP
LibraryManager: Installing id=1826
Using cache: C:\Users\HP.platformio.cache\8f\74372f406cb2e549f3eb2773b739d38f
AsyncTCP @ 1.1.1 has been successfully installed!
Looking for Hash library in registry
Warning! Library {'name': 'Hash', 'platforms': ['espressif8266']} has not been found in PlatformIO Registry.
You can ignore this message, if {'name': 'Hash', 'platforms': ['espressif8266']} is a built-in library (included in framework, SDK). E.g., SPI, Wire, etc.
Found 36 compatible libraries
Scanning dependencies...
Dependency Graph
|-- 3.0.0 #cfb3346
| |-- 6.16.1
| |-- 0.8.2
| | |-- 1.2.2
| | | |-- 1.0
| |-- 2.55
| |-- 1.2.3
| | |-- 1.2.2
| | | |-- 1.0
| | |-- 1.0
| | |-- 1.0
| | |-- 6.16.1
| |-- 1.0
| |-- 1.0
| |-- 1.1.1
| | |-- 1.0
| |-- 1.2
| | |-- 1.0
| |-- 1.2.2
| | |-- 1.0
| |-- 1.2
| | |-- 1.0
Building in release mode
Compiling .pio\build\senseo-wifi\src\Cup.cpp.o
Compiling .pio\build\senseo-wifi\src\SenseoControl.cpp.o
Compiling .pio\build\senseo-wifi\src\SenseoLed.cpp.o
Compiling .pio\build\senseo-wifi\src\SenseoSM.cpp.o
In file included from C:\Users\HP.platformio\packages\framework-arduinoespressif8266\cores\esp8266/Arduino.h:238:0,
from .pio\libdeps\senseo-wifi\Homie\src/Homie.hpp:3,
from .pio\libdeps\senseo-wifi\Homie\src/Homie.h:4,
from src\Cup.h:9,
from src\Cup.cpp:7:
c:\users\hp.platformio\packages\toolchain-xtensa\xtensa-lx106-elf\include\c++\4.8.2\algorithm:60:30: fatal error: utility: No
such file or directory
#include // UK-300.
^
compilation terminated.
*** [.pio\build\senseo-wifi\src\Cup.cpp.o] Error 1
In file included from C:\Users\HP.platformio\packages\framework-arduinoespressif8266\cores\esp8266/Arduino.h:238:0,
from .pio\libdeps\senseo-wifi\Homie\src/Homie.hpp:3,
from .pio\libdeps\senseo-wifi\Homie\src/Homie.h:4,
from src\SenseoLed.h:9,
from src\SenseoLed.cpp:7:
c:\users\hp.platformio\packages\toolchain-xtensa\xtensa-lx106-elf\include\c++\4.8.2\algorithm:60:30: fatal error: utility: No
such file or directory
#include // UK-300.
^
compilation terminated.
In file included from C:\Users\HP.platformio\packages\framework-arduinoespressif8266\cores\esp8266/Arduino.h:238:0,
from .pio\libdeps\senseo-wifi\Homie\src/Homie.hpp:3,
from .pio\libdeps\senseo-wifi\Homie\src/Homie.h:4,
from src\SenseoControl.h:9,
from src\SenseoControl.cpp:7:
c:\users\hp.platformio\packages\toolchain-xtensa\xtensa-lx106-elf\include\c++\4.8.2\algorithm:60:30: fatal error: utility: No
such file or directory
#include // UK-300.
^
compilation terminated.
In file included from C:\Users\HP.platformio\packages\framework-arduinoespressif8266\cores\esp8266/Arduino.h:238:0,
from .pio\libdeps\senseo-wifi\Homie\src/Homie.hpp:3,
from .pio\libdeps\senseo-wifi\Homie\src/Homie.h:4,
from src\SenseoSM.h:9,
from src\SenseoSM.cpp:7:
c:\users\hp.platformio\packages\toolchain-xtensa\xtensa-lx106-elf\include\c++\4.8.2\algorithm:60:30: fatal error: utility: No
such file or directory
#include // UK-300.
^
compilation terminated.
*** [.pio\build\senseo-wifi\src\SenseoControl.cpp.o] Error 1
*** [.pio\build\senseo-wifi\src\SenseoLed.cpp.o] Error 1
*** [.pio\build\senseo-wifi\src\SenseoSM.cpp.o] Error 1
================================================= [FAILED] Took 38.17 seconds =================================================
The terminal process "C:\Users\HP.platformio\penv\Scripts\platformio.exe 'run'" terminated with exit code: 1.

Terminal will be reused by tasks, press any key to close it.

Danke für deine Hilfe,
Michael

Feature request: Toggle cup detection sensor

Hi,

A recently started creating this project myself, and was wondering how to minimize the power consumption. I'm suspecting the cup detection will be lit 24/7, but the actual detection only needs milliseconds to determine if there's a cup or not.

Wouldn't it be interesting to have a digital output pin controlling the input voltage of the TCRT5000 module?

Kind regards,
Frederic

Detect correct brewedSize regardless following state

So far the information wether a small or big cup was brewed is wrongfully calculated when the machine switches into NOWATER or OFF state right after brewing. Fix to:

Send "1" or "2" on topic brewedSize, regardless the following state. Otherwise send "0".

Additional audio feedback

To make debugging easier/more transparent:

  • when powered on
  • when connected to Wifi
  • when connected to MQTT broker
  • first time machine is ready to brew (??)

Ideas or comments?

New MQTT configuration format

Hey Thom,
They justed introduced a new MQTT configuration format.
There is a change needed in the HA configuration for the part with the switch, binary sensors, sensors and the template sensor.

This is the configuration i'm using right now, were I updated everything. I just didn't get the uptime template sensor to work again:

mqtt:
  switch:
    - unique_id: uniqueid__senseowifi_power
      name: senseowifi_power
      icon: mdi:coffee-maker
      #
      state_topic: "homie/senseo/machine/power"
      state_on: "true"
      state_off: "false"
      #
      command_topic: "homie/senseo/machine/power/set"
      payload_on: "true"
      payload_off: "false"
      #
      availability_topic: "homie/senseo/$state"
      payload_available: "ready"
      payload_not_available: "lost"

  binary_sensor:
    - name: senseowifi_out_of_water
      unique_id: uniqueid__senseowifi_out_of_water
      icon: mdi:water-off-outline
      #
      state_topic: "homie/senseo/machine/outOfWater"
      payload_on: "true"
      payload_off: "false"
      device_class: problem
      #
      availability_topic: "homie/senseo/$state"
      payload_available: "ready"
      payload_not_available: "lost"

    - name: senseowifi_cup_available
      unique_id: uniqueid__senseowifi_cup_available
      icon: mdi:coffee-outline
      #
      state_topic: "homie/senseo/machine/cupAvailable"
      payload_on: "true"
      payload_off: "false"
      #
      availability_topic: "homie/senseo/$state"
      payload_available: "ready"
      payload_not_available: "lost"

    - name: senseowifi_cup_full
      unique_id: uniqueid__senseowifi_cup_full
      icon: mdi:coffee
      #
      state_topic: "homie/senseo/machine/cupFull"
      payload_on: "true"
      payload_off: "false"
      #
      availability_topic: "homie/senseo/$state"
      payload_available: "ready"
      payload_not_available: "lost"

  sensor:
    - name: senseowifi_brewed_size
      unique_id: uniqueid__senseowifi_brewed_size
      icon: mdi:coffee-maker
      #
      state_topic: "homie/senseo/machine/brewedSize"
      #
      availability_topic: "homie/senseo/$state"
      payload_available: "ready"
      payload_not_available: "lost"

    - name: senseowifi_opstate
      unique_id: uniqueid__senseowifi_opstate
      icon: mdi:state-machine
      #
      state_topic: "homie/senseo/machine/opState"
      #
      availability_topic: "homie/senseo/$state"
      payload_available: "ready"
      payload_not_available: "lost"

    
    - name: senseowifi_debug
      unique_id: uniqueid__senseowifi_debug
      icon: mdi:comment-text-multiple-outline
      #
      state_topic: "homie/senseo/machine/debug"
      #
      availability_topic: "homie/senseo/$state"
      payload_available: "ready"
      payload_not_available: "lost"

    - name: senseowifi_rssi
      unique_id: uniqueid__senseowifi_rssi
      icon: mdi:signal-cellular-2
      #
      state_topic: "homie/senseo/$stats/signal"
      unit_of_measurement: "%"
      #
      availability_topic: "homie/senseo/$state"
      payload_available: "ready"
      payload_not_available: "lost"

    - name: senseowifi_uptime
      unique_id: uniqueid__senseowifi_uptime
      icon: mdi:av-timer
      #
      state_topic: "homie/senseo/$stats/uptime"
      unit_of_measurement: "s"
      #
      availability_topic: "homie/senseo/$state"
      payload_available: "ready"
      payload_not_available: "lost"

################################################################################

template:
  - sensor:
      senseowifi_uptime_since:
        unique_id: uniqueid__senseowifi_uptime_since
        friendly_name: "Senseo Laatste Herstart"
        value_template: >
          {% if is_state("sensor.senseowifi_uptime", "unavailable") %}
            {{ states.sensor.senseowifi_uptime.state }}
          {% else %}
              {{ ((as_timestamp(now() - timedelta(seconds=(states.sensor.senseowifi_uptime.state | int))) / 300) | round() * 300) | timestamp_local() }}
          {% endif %}
        icon_template: mdi:calendar-clock
        device_class: timestamp

error when compiling

can somebody help me with my problem?
when i click build in platformio i get this error's

> Executing task in folder SenseoWifi-master: C:\Users\Bjorn\.platformio\penv\Scripts\platformio.exe run --environment senseo-wifi <

Processing senseo-wifi (platform: espressif8266; board: d1_mini; framework: arduino)
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/espressif8266/d1_mini.html
PLATFORM: Espressif 8266 (3.2.0) > WeMos D1 R2 and mini
HARDWARE: ESP8266 80MHz, 80KB RAM, 4MB Flash        
PACKAGES:
 - framework-arduinoespressif8266 3.30002.0 (3.0.2) 
 - tool-esptool 1.413.0 (4.13)
 - tool-esptoolpy 1.30000.201119 (3.0.0)
 - toolchain-xtensa 2.100300.210717 (10.3.0)        
LDF: Library Dependency Finder -> http://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Library Manager: Installing git+https://github.com/homieiot/homie-esp8266.git#cfb3346
FileNotFoundError: [WinError 2] Het systeem kan het opgegeven bestand niet vinden:
  File "C:\Users\Bjorn\.platformio\penv\Lib\site-packages\platformio\builder\main.py", line 177:
    env.SConscript("$BUILD_SCRIPT")
  File "C:\Users\Bjorn\.platformio\packages\tool-scons\scons-local-4.1.0\SCons\Script\SConscript.py", line 591:
    return _SConscript(self.fs, *files, **subst_kw)
  File "C:\Users\Bjorn\.platformio\packages\tool-scons\scons-local-4.1.0\SCons\Script\SConscript.py", line 280:
    exec(compile(scriptdata, scriptname, 'exec'), call_stack[-1].globals)
  File "C:\Users\Bjorn\.platformio\platforms\espressif8266\builder\main.py", line 238:
    target_elf = env.BuildProgram()
  File "C:\Users\Bjorn\.platformio\packages\tool-scons\scons-local-4.1.0\SCons\Util.py", line 658:
    return self.method(*nargs, **kwargs)
  File "C:\Users\Bjorn\.platformio\penv\Lib\site-packages\platformio\builder\tools\platformio.py", line 62: 
    env.ProcessProjectDeps()
  File "C:\Users\Bjorn\.platformio\packages\tool-scons\scons-local-4.1.0\SCons\Util.py", line 658:
    return self.method(*nargs, **kwargs)
  File "C:\Users\Bjorn\.platformio\penv\Lib\site-packages\platformio\builder\tools\platformio.py", line 140:
    project_lib_builder = env.ConfigureProjectLibBuilder()
  File "C:\Users\Bjorn\.platformio\packages\tool-scons\scons-local-4.1.0\SCons\Util.py", line 658:
    return self.method(*nargs, **kwargs)
  File "C:\Users\Bjorn\.platformio\penv\Lib\site-packages\platformio\builder\tools\piolib.py", line 1062:   
    project.install_dependencies()
  File "C:\Users\Bjorn\.platformio\penv\Lib\site-packages\platformio\builder\tools\piolib.py", line 898:    
    lm.install(spec)
  File "C:\Users\Bjorn\.platformio\penv\lib\site-packages\platformio\package\manager\_install.py", line 48: 
    pkg = self._install(
  File "C:\Users\Bjorn\.platformio\penv\lib\site-packages\platformio\package\manager\library.py", line 81:  
    return super(LibraryPackageManager, self)._install(
  File "C:\Users\Bjorn\.platformio\penv\lib\site-packages\platformio\package\manager\_install.py", line 97: 
    pkg = self.install_from_url(spec.url, spec, silent=silent)
  File "C:\Users\Bjorn\.platformio\penv\lib\site-packages\platformio\package\manager\_install.py", line 141:
    vcs = VCSClientFactory.new(tmp_dir, url)
  File "C:\Users\Bjorn\.platformio\penv\lib\site-packages\platformio\package\vcsclient.py", line 54:        
    obj = getattr(sys.modules[__name__], "%sClient" % type_.title())(
  File "C:\Users\Bjorn\.platformio\penv\lib\site-packages\platformio\package\vcsclient.py", line 137:       
    self.configure()
  File "C:\Users\Bjorn\.platformio\penv\lib\site-packages\platformio\package\vcsclient.py", line 146:       
    result = proc.exec_command([cls.command, "--exec-path"])
  File "C:\Users\Bjorn\.platformio\penv\lib\site-packages\platformio\proc.py", line 117:
    p = subprocess.Popen(*args, **kwargs)
  File "C:\Users\Bjorn\.platformio\python3\lib\subprocess.py", line 951:
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "C:\Users\Bjorn\.platformio\python3\lib\subprocess.py", line 1420:
    hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
========================================================================================================================================= [FAILED] Took 0.85 seconds =========================================================================================================================================The terminal process "C:\Users\Bjorn\.platformio\penv\Scripts\platformio.exe 'run', '--environment', 'senseo-wifi'" terminated with exit code: 1.

Terminal will be reused by tasks, press any key to close it.

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.