Weber iGrill 2 integration with Lovelace UI

Can this support the liquid gas tank level sensor for the iGrill v3?

@macleodit The docker-compose I put together just wholesale packages up Bendikwa’s solution to try and make it take a little easier to install/run. I looked through Bendikwa’s issues/requests in GitHub and it sounds like someone else recently made a similar request: https://github.com/bendikwa/igrill/issues/12

Obviously, it’s tough to know how much time anyone has to work on projects like this, but you could try adding a note to that issue and see if Bendikwa can add in the feature.

The ever-existing alternative, if you are wanting to get down and dirty, is to fork the repo and hack whatever functionality is needed into the new fork. That’s currently beyond my skillset to be able to help with, though.

Good luck!

Thank you.

I have had the hardest time getting the bluetooth to reliably connect. I even tried the docker you made and it has the same issue.

Raspberry Pi 4 & iGrill 3. What’s your experience been like with pairing to it?

@macleodit-

I didn’t have to fight much with the bluetooth. I did a proof of concept to make sure that the Pi4 could talk to the iGrill2. I use Raspbian- in the upper right of the Raspbian UI there is a Bluetooth icon you can click on to try and get the Pi to see if it can see the iGrill. I tried to find some documentation for that UI- this looks close: https://pimylifeup.com/raspberry-pi-bluetooth/

I’d advise to make sure that before trying to get a script to connect to the iGrill, you can at least manually see it from the OS of the Pi. Some other ideas: 1) make sure your phone isn’t auto-connecting to it every time you turn the iGrill on and 2) if you already tried the troubleshooting at the bottom of Bendikwa’s guide (https://github.com/bendikwa/igrill#troubleshooting), then you may need to revert that for your testing to get the regular Pi talking to the iGrill.

I think that will get you somewhere. If you can confirm that the Pi can at least see the iGrill, then you know the problem is in the script. If the Pi can’t see the iGrill, then there is a problem with the Bluetooth in some form or fashion.

@war1000, I followed your instructions to the tee and everything was working great. Then for some reason, I’m having bluetooth disconnects.

I’ve commented out the line in the udev section as advised, and still doing the same thing.

pi@raspberrypi:~ $ bluetoothctl
Agent registered
[CHG] Device 70:91:8F:11:FF:F5 Connected: yes
[CHG] Device 70:91:8F:11:FF:F5 Connected: no
[CHG] Device 70:91:8F:11:FF:F5 Connected: yes
[CHG] Device 70:91:8F:11:FF:F5 Connected: no
[CHG] Device 70:91:8F:11:FF:F5 Connected: yes
[CHG] Device 70:91:8F:11:FF:F5 Connected: no
[CHG] Device 70:91:8F:11:FF:F5 Connected: yes
[CHG] Device 70:91:8F:11:FF:F5 Connected: no
[CHG] Device 70:91:8F:11:FF:F5 Connected: yes
[CHG] Device 70:91:8F:11:FF:F5 Connected: no
[CHG] Device 70:91:8F:11:FF:F5 Connected: yes
[CHG] Device 70:91:8F:11:FF:F5 Connected: no
[CHG] Device 70:91:8F:11:FF:F5 Connected: yes
[CHG] Device 70:91:8F:11:FF:F5 Connected: no
[CHG] Device 70:91:8F:11:FF:F5 Connected: yes
[CHG] Device 70:91:8F:11:FF:F5 Connected: no
[CHG] Device 70:91:8F:11:FF:F5 Connected: yes
[CHG] Device 70:91:8F:11:FF:F5 Connected: no
[CHG] Device 70:91:8F:11:FF:F5 Connected: yes
[CHG] Device 70:91:8F:11:FF:F5 Connected: no
[CHG] Device 70:91:8F:11:FF:F5 Connected: yes
[CHG] Device 70:91:8F:11:FF:F5 Connected: no
[CHG] Device 70:91:8F:11:FF:F5 Connected: yes
[CHG] Device 70:91:8F:11:FF:F5 Connected: no
[CHG] Device 70:91:8F:11:FF:F5 Connected: yes
[CHG] Device 70:91:8F:11:FF:F5 Connected: no
[bluetooth]# 

Any suggestions?

For those (NOOBS) like me wanting to get this to work, I’ve just installed this (2hrs later :dizzy_face:) on my Pi Plantgateway that is being used to measure to xiaomi plant sensors. It took a bit of figuring out as there are inconsistencies in the various versions of the examples files but here is what I did to get it work under Python3.

  1. Created a folder on my Pi called /home/pi/igrill
  2. Copied all the files from the latest version on the releases page into the igrill folder using WinSCP (DO NOT CREATE A CONFIG FOLDER)
  3. Inside /home/pi/igrill/, I copied the two example files that were in the zip I downloaded
  4. As I’m running Python3, I ran sudo pip3 list to check all of the packages met the requirements list
  5. For any that need to be installed, run sudo pip3 install <packagename>.
  6. Using hcitool scan, scan for the MAC address of your iGrill
  7. Edit the device.yaml in your /igrill folder and add the newly discovered MAC address (and append your MQTT topic path if you want to)
  8. Finally, follow the instructions for editing the igrill.service file and I used the following to match the paths I created above.
  9. Once you created the igrill.service file, you’ll need to switch over to root with sudo -i and run systemctl daemon-reload && systemctl enable igrill && systemctl start igrill
  10. Reboot
  11. You can test if the igrill service is running with systemctl status igrill. Keep refreshing this for a few seconds to check that the service is not crashing.
[Unit]
Description=igrill MQTT service
After=network.target

[Service]
Type=simple
Restart=always
RestartSec=2
ExecStart=/usr/bin/python3 /home/pi/igrill/monitor.py -c /home/pi/igrill/

[Install]
WantedBy=multi-user.target

For my MQTT file, I wanted to use my Synology hosted broker and this took a bit to get that sorted. Here is the config:

#MQTT All values default to paho.mqtt.client defaults
mqtt:
  host:       '10.0.1.100'                   # Optional default 'localhost'
  port:       1883                                # Optional default '1883'
  keepalive:  60 

Note there are no quotes around the port or keepalive.

Let me know if I’ve left anything out.

FYI, I did also follow the troubleshooting guide and commented out the line in question during my 2hr debugging marathon.

Sorry @El_Duderino, I have no idea. I am just glad it worked for me. I hope it is not a faulty device for you.

It connects immediately to my phone/app, but issues with the pi. The strange thing is that it worked for sereral hours without fail while I was setting up all the MQTT and home assistant stuff, so not sure what could have happened. Maybe I should try a different pi? I can’t seem to find anything online that would point me in the right direction.

Should I be able to pop the existing SD card into another pi and it work without issue or is that overly ambitious?

yes, that is what I did too. I had two pi’s. the 3b+ is what i am using now. also i do notice there will be disconnects once in a while thoughout the cooking and i have a trigger in node red to restart the pi if it doesn’t get an update over 15 mins. but make sure if you do this, you have a check for cooking or not cooking. btw, how ofter are you getting the disconnects?

It literally connects and disconnects every few seconds

Yeah that is not good. when i was first trying to do this. I created a disk image after i installed the plugin and before configuring it so i could keep trying (due to my lack on knoweldge of python). maybe try and rebuild one more time?

Anyone got the igrill.service working on a Raspberry Pi with stretch? If you could share your config, that would be appreciated. My service is alternating between activating and active all the time so something not right.

pi@raspberrypi-ble:~ $ systemctl is-active igrill
activating
pi@raspberrypi-ble:~ $ systemctl is-active igrill
active
pi@raspberrypi-ble:~ $ systemctl is-active igrill
active
pi@raspberrypi-ble:~ $ systemctl is-active igrill
activating
pi@raspberrypi-ble:~ $ systemctl is-active igrill
active

This is my current execution path in the service file

ExecStart=/usr/bin/python3 /home/igrill/monitor.py -c /home/igrill/config

However, this works if I run it manually
python3 /home/igrill/monitor.py -c /home/igrill/config

@war1000 has it sorted here Weber iGrill 2 integration with Lovelace UI. The device and mqtt.yaml files just need to be in the same folder as all the other files. Following the guide and creating a /config folder does not seem to work. Working flawlessly now. I’ve amended my post above.

Anyone know how to create a sensor that triggers when the set temperature is within a certain percentage of the chosen target? Want to notify the wife when the temp is close like the app does.

Do you have a sensor for current twmp and target temp?
Should be easily doable qith a value template and some math.

I reinstalled (twice) and seem to have bluetooth working. I’m not sure how stable it is though.

I’m not getting any mqtt messages now. That was working flawlessly the other day and populating my Lovelace dashboard perfectly.

This is growing increasingly frustrating!

Thanks. I ended up doing this which was easier. I only have one probe (iGrill mini) so this works a treat.

  - platform: template
    sensors:
      igrill_pretarget_temp_probe_1:
        value_template: "{{ states('input_number.igrill_probe_1_target') | int - 5 }}"
        friendly_name: Probe 1 Pre Target Temp
        unit_of_measurement: '°C'

  - platform: template
    sensors:
      igrill_pretarget_alert_temp_probe_1:
        value_template:
          '{% if (states.sensor.igrill_thermometer.state | int) >= (states.igrill_pretarget_temp_probe_1.state | int) %}
            PreAlert
          {% else %}
            Normal
          {% endif %}'
        friendly_name: Probe 1 Pre Target Alert
1 Like

Why did you create 2 sensors? Do you need the first sensor for other things as well? If not, you can combine it into one sensor.

I created two as my coding is very limited. Took me 2hrs just to work that out! :yum:

First, you should avoid using this notation states.sensor.xxxx but instead use this notation states('sensor.xxx'), see here for more information. You used it in the second sensor at the end.

Combining your sensors is pretty simple, just replace the right part of the equation in the value_template of the second sensor with the value_template from the first sensor.

Something like this (untested and posted from my phone):

  - platform: template
    sensors:
      igrill_pretarget_alert_temp_probe_1:
        value_template: >
          {% if (states('sensor.igrill_thermometer') | int) >= (states('input_number.igrill_probe_1_target') | int - 5) %}
            PreAlert
          {% else %}
            Normal
          {% endif %}
        friendly_name: Probe 1 Pre Target Alert