BBQ Guru CyberQ Wi-Fi configuration

I have the BBQ Guru CyberQ Wi-Fi thermostatic controller and just did a 12 hour brisket cook. While running the cook overnight I had thoughts of how nice it would be to have the controller integrated into my ever growing HA system. After a lot of searching I was unable to find any documented successful implementations for this controller.
After 2 days of searching, scraping and amateur HA programming I have a working solution.
Basic section card for the CyberQ. All it does is display. No inputs or updating. Still trying to decide how I might approach that.
Card

This code goes into your configuration.yaml file. Edit the IP to match your controller. I set my controller to have a dedicated IP in the router so this doesn’t have to be changed all the time.

rest:
  - resource: http://192.168.1.35/all.xml
    sensor:
      - name: "BBQ Fan Output"
        value_template: "{{ (value_json['nutcallstatus']['OUTPUT_PERCENT'])}}"
      - name: "BBQ Cook Name"
        value_template: "{{ (value_json['nutcallstatus']['COOK']['COOK_NAME'])}}"
      - name: "BBQ Pit Set Point"
        value_template: "{{ (value_json['nutcallstatus']['COOK']['COOK_SET'] | float / 10) | round(1) }}"
        unit_of_measurement: "°F"
      - name: "BBQ Pit Temp"
        value_template: "{{ (value_json['nutcallstatus']['COOK']['COOK_TEMP'] | float / 10) | round(1) }}"
        unit_of_measurement: "°F"
      - name: "BBQ Food 1 Name"
        value_template: "{{ (value_json['nutcallstatus']['FOOD1']['FOOD1_NAME'])}}"
      - name: "BBQ Food 1 Set Point"
        value_template: "{{ (value_json['nutcallstatus']['FOOD1']['FOOD1_SET'] | float / 10) | round(1) }}"
        unit_of_measurement: "°F"
      - name: "BBQ Food 1 Temp"
        value_template: "{{ (value_json['nutcallstatus']['FOOD1']['FOOD1_TEMP'] | float / 10) | round(1) }}"
        unit_of_measurement: "°F"
      - name: "BBQ Food 2 Name"
        value_template: "{{ (value_json['nutcallstatus']['FOOD2']['FOOD2_NAME'])}}"
      - name: "BBQ Food 2 Set Point"
        value_template: "{{ (value_json['nutcallstatus']['FOOD2']['FOOD2_SET'] | float / 10) | round(1) }}"
        unit_of_measurement: "°F"
      - name: "BBQ Food 2 Temp"
        value_template: "{{ (value_json['nutcallstatus']['FOOD2']['FOOD2_TEMP'] | float / 10) | round(1) }}"
        unit_of_measurement: "°F"
      - name: "BBQ Food 3 Name"
        value_template: "{{ (value_json['nutcallstatus']['FOOD3']['FOOD3_NAME'])}}"
      - name: "BBQ Food 3 Set Point"
        value_template: "{{ (value_json['nutcallstatus']['FOOD3']['FOOD3_SET'] | float / 10) | round(1) }}"
        unit_of_measurement: "°F"
      - name: "BBQ Food 3 Temp"
        value_template: "{{ (value_json['nutcallstatus']['FOOD3']['FOOD3_TEMP'] | float / 10) | round(1) }}"
        unit_of_measurement: "°F"


rest_command:
  set_cook_name:
    url: 'http://192.168.1.35/'
    method: 'post'
    payload: "COOK_NAME={{ name }}"
    headers:
      content-type: application/x-www-form-urlencoded

  set_cook_temp:
    url: 'http://192.168.1.35/'
    method: 'post'
    payload: "COOK_SET={{ temp }}"
    headers:
      content-type: application/x-www-form-urlencoded


  set_food1_name:
    url: 'http://192.168.1.35/'
    method: 'post'
    payload: "FOOD1_NAME={{ name }}"
    headers:
      content-type: application/x-www-form-urlencoded
      
  set_food1_temp:
    url: 'http://192.168.1.35/'
    method: 'post'
    payload: "FOOD1_SET={{ temp }}"
    headers:
      content-type: application/x-www-form-urlencoded

  set_food2_name:
    url: 'http://192.168.1.35/'
    method: 'post'
    payload: "FOOD2_NAME={{ name }}"
    headers:
      content-type: application/x-www-form-urlencoded

  set_food2_temp:
    url: 'http://192.168.1.35/'
    method: 'post'
    payload: "FOOD2_SET={{ temp }}"
    headers:
      content-type: application/x-www-form-urlencoded

  set_food3_name:
    url: 'http://192.168.1.35/'
    method: 'post'
    payload: "FOOD3_NAME={{ name }}"
    headers:
      content-type: application/x-www-form-urlencoded

  set_food3_temp:
    url: 'http://192.168.1.35/'
    method: 'post'
    payload: "FOOD3_SET={{ temp }}"
    headers:
      content-type: application/x-www-form-urlencoded


The rest section reads the values from the controller. The rest_command section writes the values to the controller. Writing works but seems inconsistent with the temp values so some tweaking may be needed.

Scripts are needed to write to the unit.

Paste the scripts below into your scripts.yaml file.

bbq_set_cook_name:
  alias: 'BBQ: Set Cook Name'
  sequence:
  - data:
      name: New Cook Name2
    action: rest_command.set_cook_name
bbq_set_cook_temp:
  alias: 'BBQ: Set Pit Temp'
  sequence:
  - data:
      temp: 2400
    action: rest_command.set_cook_temp
    response_variable: bbqct
bbq_set_food1_name:
  alias: 'BBQ: Set Food 1 Name'
  sequence:
  - data:
      name: New Food 1 Nameb
    action: rest_command.set_food1_name
bbq_set_food1_temp:
  alias: 'BBQ: Set Food 1 Temp'
  sequence:
  - data:
      temp: 1650
    action: rest_command.set_food1_temp
bbq_set_food2_name:
  alias: 'BBQ: Set Food 2 Name'
  sequence:
  - service: rest_command.set_food2_name
    data:
      name: New Food 2 Name
bbq_set_food2_temp:
  alias: 'BBQ: Set Food 2 Temp'
  sequence:
  - data:
      temp: 1650
    action: rest_command.set_food2_temp
bbq_set_food3_name:
  alias: 'BBQ: Set Food 3 Name'
  sequence:
  - data:
      name: New Food 3 Name
    action: rest_command.set_food3_name
bbq_set_food3_temp:
  alias: 'BBQ: Set Food 3 Temp'
  sequence:
  - data:
      temp: 1650
    action: rest_command.set_food3_temp

This is the code for the section card.

type: grid
cards:
  - type: custom:button-card
    name: Big Green Egg
    show_name: false
    entity: null
    aspect_ratio: 1.4/1
    styles:
      grid:
        - grid-template-areas: >-
            "n n pitn" "i i pitn"  "food1n food1s food1t" "food2n food2s food2t"
            "food3n food3s food3t"  
        - grid-template-columns: 33% 33% 33%
        - grid-template-rows: null
      custom_fields:
        logo:
          - position: absolute
          - left: 2%
          - top: 0%
    custom_fields:
      logo:
        card:
          type: custom:button-card
          color: transparent
          show_name: false
          entity_picture: /local/bgexl.jpeg
          show_entity_picture: true
          styles:
            card:
              - background-color: transparent
              - border-style: none
            icon:
              - width: 290px
              - height: 180px
              - border-radius: 5px
      pitn:
        card:
          type: vertical-stack
          cards:
            - type: custom:button-card
              entity: sensor.bbq_cook_name
              name: Pit
              show_icon: false
              show_state: true
              show_name: false
              styles:
                card:
                  - border-radius: 10px
                  - border-style: none
                  - box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2)
                icon:
                  - width: 35px
                  - height: 35px
                  - align-self: null
                  - text-align: start
                  - padding: 5px
                img_cell:
                  - justify-content: bottom
                  - align-self: bottom
                  - margin: null
                state:
                  - align-self: center
                  - justify-self: center
                  - padding-left: 1px
                  - padding-top: 1px
                  - padding-bottom: 1px
                  - letter-spacing: 1.0px
                  - color: white
            - type: custom:button-card
              entity: sensor.bbq_pit_set_point
              name: Pit Target
              show_icon: false
              show_state: true
              show_name: true
              layout: icon_label
              styles:
                card:
                  - background-color: rgba(255, 255, 255,0)
                  - border-radius: none
                  - border-style: none
                  - box-shadow: none
                name:
                  - font-size: 13px
                  - letter-spacing: 1.0px
                  - color: white
                state:
                  - font-weight: bold
                  - font-size: 13px
                  - letter-spacing: 1.0px
                  - color: white
            - type: custom:button-card
              entity: sensor.bbq_pit_temp
              name: Pit Temperature
              show_icon: false
              show_state: true
              show_name: true
              layout: icon_label
              styles:
                card:
                  - background-color: rgba(255, 255, 255,0)
                  - border-radius: none
                  - border-style: none
                  - box-shadow: none
                name:
                  - font-size: 13px
                  - letter-spacing: 1.0px
                  - color: white
                state:
                  - font-weight: bold
                  - font-size: 13px
                  - letter-spacing: 1.0px
                  - color: white
      food1n:
        card:
          type: custom:button-card
          entity: sensor.bbq_food_1_name
          name: Pit
          show_icon: false
          show_state: true
          show_name: false
          styles:
            card:
              - border-radius: 10px
              - border-style: none
              - box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2)
            icon:
              - width: 35px
              - height: 35px
              - align-self: null
              - text-align: start
              - padding: 5px
            img_cell:
              - justify-content: bottom
              - align-self: bottom
              - margin: null
            state:
              - font-weight: bold
              - font-size: 13px
              - align-self: center
              - justify-self: center
              - padding-left: 1px
              - padding-top: 1px
              - padding-bottom: 1px
              - letter-spacing: 1.0px
              - color: white
      food1s:
        card:
          type: custom:button-card
          entity: sensor.bbq_food_2_name
          name: Pit
          show_icon: false
          show_state: true
          show_name: false
          styles:
            card:
              - border-radius: 10px
              - border-style: none
              - box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2)
            icon:
              - width: 35px
              - height: 35px
              - align-self: null
              - text-align: start
              - padding: 5px
            img_cell:
              - justify-content: bottom
              - align-self: bottom
              - margin: null
            state:
              - font-weight: bold
              - font-size: 13px
              - align-self: center
              - justify-self: center
              - padding-left: 1px
              - padding-top: 1px
              - padding-bottom: 1px
              - letter-spacing: 1.0px
              - color: white
      food1t:
        card:
          type: custom:button-card
          entity: sensor.bbq_food_3_name
          name: Pit
          show_icon: false
          show_state: true
          show_name: false
          styles:
            card:
              - border-radius: 10px
              - border-style: none
              - box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2)
            icon:
              - width: 35px
              - height: 35px
              - align-self: null
              - text-align: start
              - padding: 5px
            img_cell:
              - justify-content: bottom
              - align-self: bottom
              - margin: null
            state:
              - font-weight: bold
              - font-size: 13px
              - align-self: center
              - justify-self: center
              - padding-left: 1px
              - padding-top: 1px
              - padding-bottom: 1px
              - letter-spacing: 1.0px
              - color: white
      food2n:
        card:
          type: custom:button-card
          entity: sensor.bbq_food_1_set_point
          name: Target Temperature
          show_icon: false
          show_state: true
          show_name: true
          layout: icon_label
          styles:
            card:
              - background-color: rgba(255, 255, 255,0)
              - border-radius: none
              - border-style: none
              - box-shadow: none
            name:
              - font-size: 12px
              - letter-spacing: 1.0px
              - color: white
            state:
              - font-weight: bold
              - font-size: 14px
              - letter-spacing: 1.0px
              - color: white
      food2s:
        card:
          type: custom:button-card
          entity: sensor.bbq_food_2_set_point
          name: Target Temperature
          show_icon: false
          show_state: true
          show_name: true
          layout: icon_label
          styles:
            card:
              - background-color: rgba(255, 255, 255,0)
              - border-radius: none
              - border-style: none
              - box-shadow: none
            name:
              - font-size: 12px
              - letter-spacing: 1.0px
              - color: white
            state:
              - font-weight: bold
              - font-size: 14px
              - letter-spacing: 1.0px
              - color: white
      food2t:
        card:
          type: custom:button-card
          entity: sensor.bbq_food_3_set_point
          name: Target Temperature
          show_icon: false
          show_state: true
          show_name: true
          layout: icon_label
          styles:
            card:
              - background-color: rgba(255, 255, 255,0)
              - border-radius: none
              - border-style: none
              - box-shadow: none
            name:
              - font-size: 12px
              - letter-spacing: 1.0px
              - color: white
            state:
              - font-weight: bold
              - font-size: 14px
              - letter-spacing: 1.0px
              - color: white
      food3n:
        card:
          type: custom:button-card
          entity: sensor.bbq_food_1_temp
          name: Food Temp
          show_icon: false
          show_state: true
          show_name: true
          layout: icon_label
          styles:
            card:
              - background-color: rgba(255, 255, 255,0)
              - border-radius: none
              - border-style: none
              - box-shadow: none
            name:
              - font-size: 12px
              - letter-spacing: 1.0px
              - color: white
            state:
              - font-weight: bold
              - font-size: 14px
              - letter-spacing: 1.0px
              - color: white
      food3s:
        card:
          type: custom:button-card
          entity: sensor.bbq_food_2_temp
          name: Food Temp
          show_icon: false
          show_state: true
          show_name: true
          layout: icon_label
          styles:
            card:
              - background-color: rgba(255, 255, 255,0)
              - border-radius: none
              - border-style: none
              - box-shadow: none
            name:
              - font-size: 12px
              - letter-spacing: 1.0px
              - color: white
            state:
              - font-weight: bold
              - font-size: 14px
              - letter-spacing: 1.0px
              - color: white
      food3t:
        card:
          type: custom:button-card
          entity: sensor.bbq_food_3_temp
          name: Food Temp
          show_icon: false
          show_state: true
          show_name: true
          layout: icon_label
          styles:
            card:
              - background-color: rgba(255, 255, 255,0)
              - border-radius: none
              - border-style: none
              - box-shadow: none
            name:
              - font-size: 12px
              - letter-spacing: 1.0px
              - color: white
            state:
              - font-weight: bold
              - font-size: 14px
              - letter-spacing: 1.0px
              - color: white
title: BBQ Monitor
visibility:
  - condition: state
    entity: sensor.bbq_cook_name
    state_not: unavailable

That’s it. Maybe there are others out there that might find this helpful. And if anyone wants to run with this and create some better cards or updating cards I would love to see the code. I’m just an amateur.

This is the model I created this implementation for: