Thermoworks RFX and Node

What new frequency does it unlock after you pay?

Various frequencies all the way to every minute. Just pay a bit extra depending on how frequent.

I haven’t been back to look at this in a few months, but whoever made the integration thank you so much. I know it is running through the cloud but Im cool with that. Just nice to show freezer temps on my dashboard. I have it working with Nodes and RFX, I guess Ill have to smoke something this weekend and figure out what automations I need with that. My wife is gonna love when the lights start flashing to let me know to wrap the brisket. :slight_smile:

@jazzmonger What graph card are you using?

I use Plotly for all my graphing.
I spent quite a bit of time on these RFX Dashboards just before doing a reverse sear prime rib for Thanksgiving. Turning on a probe’s automation then shows it in all the dashboards. Turning it off hides it. The automation triggers cause Alexa to go nuts and send notifications to my iPhone. Pretty slick.

Seems great minds think alike in many things (also considering seared Prime Rib- have been doing for years on the stovetop/oven and now considering stovetop and gas grill rotisserie as way to try out my recent RDF probes, an upgrade for my previous Signals solution). Currently planned for a Christmas cook

Any chance of getting access to your card/code/templets/graphing lib/Alexa integration. Love to take a look at what you created, as it looks like you have already done much of what I intended. And perhaps you might be interested in any additions (ie eventual goal is to generate real-time cook ETAs, and an interview process based “assistant” in HA that will at the start of a cook prompt for food type, and weight to AUTOMATICALLY config temp alarms and aid in the initial time calc while ACTUAL grill grate temp & meat cook temp rate of change refines/update that time over the cook)… Of course willing to share/publish for others to build on as well.

Big dreams but love to build on what you have already done, looks great!

Happy to. I’m busy today but will look at this tomorrow. It’s all working great.

Jeff

This is what I have so far. I’m sure it can be prettied up by you guys :slight_smile:
There are 3 tabs to the dashboard

Overview Tab:

type: sections
max_columns: 4
title: Alarms
path: alarms
sections:
  - type: grid
    cards:
      - type: custom:gauge-card-pro
        entity: sensor.rfx_black_temp
        entity2: input_number.black_meat_probe_alarm_temp
        needle: true
        min: "50"
        max: 210
        segments:
          - from: 50
            color: var(--dark-grey-color)
        inner:
          min: 50
          max: 210
          mode: needle
          gradient: true
          gradient_resolution: high
          segments:
            - from: 50
              color: var(--red-color)
            - from: 150
              color: var(--light-blue-color)
            - from: 200
              color: var(--light-blue-color)
            - from: 250
              color: var(--black-color)
        gradient: true
        gradient_resolution: high
        value_texts:
          primary: "{{ states(entity) | float | round(1) }}°F"
          secondary: "{{ states(entity2) | float | round(0) }}F"
          secondary_color: "#aaa"
        titles:
          primary: Black Probe
        visibility:
          - condition: state
            entity: automation.black_meat_probe_temp_reached
            state: "on"
      - type: custom:gauge-card-pro
        entity: sensor.rfx_orange_temp
        entity2: input_number.orange_meat_probe_alarm_temp
        needle: true
        min: "50"
        max: 210
        segments:
          - from: 50
            color: var(--orange-color)
        inner:
          min: 50
          max: 210
          mode: needle
          gradient: true
          gradient_resolution: high
          segments:
            - from: 50
              color: var(--red-color)
            - from: 150
              color: var(--light-blue-color)
            - from: 200
              color: var(--light-blue-color)
            - from: 250
              color: var(--black-color)
        gradient: true
        gradient_resolution: high
        value_texts:
          primary: "{{ states(entity) | float | round(1) }}°F"
          secondary: "{{ states(entity2) | float | round(0) }}F"
          secondary_color: "#aaa"
        titles:
          primary: Orange Probe
        visibility:
          - condition: state
            entity: automation.orange_meat_probe_temp_reached
            state: "on"
      - type: custom:gauge-card-pro
        entity: sensor.rfx_white_temp
        entity2: input_number.white_meat_probe_alarm_temp
        needle: true
        min: "50"
        max: 210
        segments:
          - from: 50
            color: var(--white-color)
        inner:
          min: 50
          max: 210
          mode: needle
          gradient: true
          segments:
            - from: 50
              color: var(--red-color)
            - from: 150
              color: var(--light-blue-color)
            - from: 200
              color: var(--light-blue-color)
            - from: 250
              color: var(--black-color)
          gradient_resolution: medium
        gradient: true
        gradient_resolution: high
        value_texts:
          primary: "{{ states(entity) | float | round(1) }}°F"
          secondary: "{{ states(entity2) | float | round(0) }}F"
          secondary_color: "#aaa"
        titles:
          primary: White Probe
        visibility:
          - condition: state
            entity: automation.alarm_white_meat_probe_temp_reached
            state: "on"
      - type: custom:gauge-card-pro
        entity: sensor.rfx_red_temp
        entity2: input_number.red_meat_probe_alarm_temp
        needle: true
        min: "50"
        max: 208
        segments:
          - from: 50
            color: var(--red-color)
        inner:
          min: 50
          max: 210
          mode: needle
          gradient: true
          segments:
            - from: 50
              color: var(--red-color)
            - from: 150
              color: var(--light-blue-color)
            - from: 200
              color: var(--light-blue-color)
            - from: 250
              color: var(--black-color)
          gradient_resolution: medium
        gradient: true
        gradient_resolution: high
        value_texts:
          primary: "{{ states(entity) | float | round(1) }}°F"
          secondary: "{{ states(entity2) | float | round(0) }}F"
          secondary_color: "#aaa"
        titles:
          primary: Red Probe
        visibility:
          - condition: state
            entity: automation.alarm_red_meat_probe_temp_reached
            state: "on"
    column_span: 4
  - type: grid
    cards:
      - type: heading
        heading: Enable Which Probes
        heading_style: title
      - type: entities
        entities:
          - entity: automation.black_meat_probe_temp_reached
          - entity: automation.orange_meat_probe_temp_reached
          - entity: automation.alarm_white_meat_probe_temp_reached
          - entity: automation.alarm_red_meat_probe_temp_reached
  - type: grid
    cards:
      - type: heading
        heading: Set Alarm Temp
        heading_style: title
      - type: custom:numberbox-card
        border: true
        entity: input_number.black_meat_probe_alarm_temp
        min: 60
        max: 225
        unit: F
        speed: 200
        icon_plus: mdi:chevron-up
        icon_minus: mdi:chevron-down
        delay: 750
        step: 5
        card_mod:
          style: >
            .cur-num{font-size:20px !important}

            .cur-num.upd{color:green}

            .cur-unit{color:orange; font-size:100% !important; opacity:1
            !important}

            .grid-left{color:grey}

            .grid-right{color:grey}

            .cur-box ha-icon{transform:scale(2)}
        visibility:
          - condition: state
            entity: automation.black_meat_probe_temp_reached
            state: "on"
      - type: custom:numberbox-card
        border: true
        entity: input_number.orange_meat_probe_alarm_temp
        min: 60
        max: 225
        unit: F
        speed: 200
        icon_plus: mdi:chevron-up
        icon_minus: mdi:chevron-down
        delay: 750
        step: 5
        card_mod:
          style: >
            .cur-num{font-size:20px !important}

            .cur-num.upd{color:green}

            .cur-unit{color:orange; font-size:100% !important; opacity:1
            !important}

            .grid-left{color:yellow}

            .grid-right{color:orange}

            .cur-box ha-icon{transform:scale(2)}
        visibility:
          - condition: state
            entity: automation.orange_meat_probe_temp_reached
            state: "on"
      - type: custom:numberbox-card
        border: true
        entity: input_number.white_meat_probe_alarm_temp
        min: 60
        max: 225
        unit: F
        speed: 200
        icon_plus: mdi:chevron-up
        icon_minus: mdi:chevron-down
        delay: 750
        step: 5
        card_mod:
          style: >
            .cur-num{font-size:20px !important}

            .cur-num.upd{color:green}

            .cur-unit{color:orange; font-size:100% !important; opacity:1
            !important}

            .grid-left{color:white}

            .grid-right{color:}

            .cur-box ha-icon{transform:scale(2)}
        visibility:
          - condition: state
            entity: automation.alarm_white_meat_probe_temp_reached
            state: "on"
      - type: custom:numberbox-card
        border: true
        entity: input_number.red_meat_probe_alarm_temp
        min: 60
        max: 225
        unit: F
        speed: 200
        icon_plus: mdi:chevron-up
        icon_minus: mdi:chevron-down
        delay: 750
        step: 5
        card_mod:
          style: >
            .cur-num{font-size:20px !important}

            .cur-num.upd{color:green}

            .cur-unit{color:orange; font-size:100% !important; opacity:1
            !important}

            .grid-left{color:red}

            .grid-right{color:red}

            .cur-box ha-icon{transform:scale(2)}
        visibility:
          - condition: state
            entity: automation.alarm_red_meat_probe_temp_reached
            state: "on"
  - type: grid
    cards:
      - type: heading
        heading: Probe Battery Levels
        heading_style: title
      - type: entities
        entities:
          - entity: sensor.m100094926_battery
            name: Black Battery
          - entity: sensor.m100130697_battery
            name: Orange Battery
          - entity: sensor.m100130696_battery
            name: White Battery
          - entity: sensor.m100087340_battery
            name: Red Battery
cards: []
icon: mdi:alarm

Individual probe graphs tab:

type: sections
max_columns: 4
title: Alarms
path: alarms
sections:
  - type: grid
    cards:
      - type: custom:gauge-card-pro
        entity: sensor.rfx_black_temp
        entity2: input_number.black_meat_probe_alarm_temp
        needle: true
        min: "50"
        max: 210
        segments:
          - from: 50
            color: var(--dark-grey-color)
        inner:
          min: 50
          max: 210
          mode: needle
          gradient: true
          gradient_resolution: high
          segments:
            - from: 50
              color: var(--red-color)
            - from: 150
              color: var(--light-blue-color)
            - from: 200
              color: var(--light-blue-color)
            - from: 250
              color: var(--black-color)
        gradient: true
        gradient_resolution: high
        value_texts:
          primary: "{{ states(entity) | float | round(1) }}°F"
          secondary: "{{ states(entity2) | float | round(0) }}F"
          secondary_color: "#aaa"
        titles:
          primary: Black Probe
        visibility:
          - condition: state
            entity: automation.black_meat_probe_temp_reached
            state: "on"
      - type: custom:gauge-card-pro
        entity: sensor.rfx_orange_temp
        entity2: input_number.orange_meat_probe_alarm_temp
        needle: true
        min: "50"
        max: 210
        segments:
          - from: 50
            color: var(--orange-color)
        inner:
          min: 50
          max: 210
          mode: needle
          gradient: true
          gradient_resolution: high
          segments:
            - from: 50
              color: var(--red-color)
            - from: 150
              color: var(--light-blue-color)
            - from: 200
              color: var(--light-blue-color)
            - from: 250
              color: var(--black-color)
        gradient: true
        gradient_resolution: high
        value_texts:
          primary: "{{ states(entity) | float | round(1) }}°F"
          secondary: "{{ states(entity2) | float | round(0) }}F"
          secondary_color: "#aaa"
        titles:
          primary: Orange Probe
        visibility:
          - condition: state
            entity: automation.orange_meat_probe_temp_reached
            state: "on"
      - type: custom:gauge-card-pro
        entity: sensor.rfx_white_temp
        entity2: input_number.white_meat_probe_alarm_temp
        needle: true
        min: "50"
        max: 210
        segments:
          - from: 50
            color: var(--white-color)
        inner:
          min: 50
          max: 210
          mode: needle
          gradient: true
          segments:
            - from: 50
              color: var(--red-color)
            - from: 150
              color: var(--light-blue-color)
            - from: 200
              color: var(--light-blue-color)
            - from: 250
              color: var(--black-color)
          gradient_resolution: medium
        gradient: true
        gradient_resolution: high
        value_texts:
          primary: "{{ states(entity) | float | round(1) }}°F"
          secondary: "{{ states(entity2) | float | round(0) }}F"
          secondary_color: "#aaa"
        titles:
          primary: White Probe
        visibility:
          - condition: state
            entity: automation.alarm_white_meat_probe_temp_reached
            state: "on"
      - type: custom:gauge-card-pro
        entity: sensor.rfx_red_temp
        entity2: input_number.red_meat_probe_alarm_temp
        needle: true
        min: "50"
        max: 208
        segments:
          - from: 50
            color: var(--red-color)
        inner:
          min: 50
          max: 210
          mode: needle
          gradient: true
          segments:
            - from: 50
              color: var(--red-color)
            - from: 150
              color: var(--light-blue-color)
            - from: 200
              color: var(--light-blue-color)
            - from: 250
              color: var(--black-color)
          gradient_resolution: medium
        gradient: true
        gradient_resolution: high
        value_texts:
          primary: "{{ states(entity) | float | round(1) }}°F"
          secondary: "{{ states(entity2) | float | round(0) }}F"
          secondary_color: "#aaa"
        titles:
          primary: Red Probe
        visibility:
          - condition: state
            entity: automation.alarm_red_meat_probe_temp_reached
            state: "on"
    column_span: 4
  - type: grid
    cards:
      - type: heading
        heading: Enable Which Probes
        heading_style: title
      - type: entities
        entities:
          - entity: automation.black_meat_probe_temp_reached
          - entity: automation.orange_meat_probe_temp_reached
          - entity: automation.alarm_white_meat_probe_temp_reached
          - entity: automation.alarm_red_meat_probe_temp_reached
  - type: grid
    cards:
      - type: heading
        heading: Set Alarm Temp
        heading_style: title
      - type: custom:numberbox-card
        border: true
        entity: input_number.black_meat_probe_alarm_temp
        min: 60
        max: 225
        unit: F
        speed: 200
        icon_plus: mdi:chevron-up
        icon_minus: mdi:chevron-down
        delay: 750
        step: 5
        card_mod:
          style: >
            .cur-num{font-size:20px !important}

            .cur-num.upd{color:green}

            .cur-unit{color:orange; font-size:100% !important; opacity:1
            !important}

            .grid-left{color:grey}

            .grid-right{color:grey}

            .cur-box ha-icon{transform:scale(2)}
        visibility:
          - condition: state
            entity: automation.black_meat_probe_temp_reached
            state: "on"
      - type: custom:numberbox-card
        border: true
        entity: input_number.orange_meat_probe_alarm_temp
        min: 60
        max: 225
        unit: F
        speed: 200
        icon_plus: mdi:chevron-up
        icon_minus: mdi:chevron-down
        delay: 750
        step: 5
        card_mod:
          style: >
            .cur-num{font-size:20px !important}

            .cur-num.upd{color:green}

            .cur-unit{color:orange; font-size:100% !important; opacity:1
            !important}

            .grid-left{color:yellow}

            .grid-right{color:orange}

            .cur-box ha-icon{transform:scale(2)}
        visibility:
          - condition: state
            entity: automation.orange_meat_probe_temp_reached
            state: "on"
      - type: custom:numberbox-card
        border: true
        entity: input_number.white_meat_probe_alarm_temp
        min: 60
        max: 225
        unit: F
        speed: 200
        icon_plus: mdi:chevron-up
        icon_minus: mdi:chevron-down
        delay: 750
        step: 5
        card_mod:
          style: >
            .cur-num{font-size:20px !important}

            .cur-num.upd{color:green}

            .cur-unit{color:orange; font-size:100% !important; opacity:1
            !important}

            .grid-left{color:white}

            .grid-right{color:}

            .cur-box ha-icon{transform:scale(2)}
        visibility:
          - condition: state
            entity: automation.alarm_white_meat_probe_temp_reached
            state: "on"
      - type: custom:numberbox-card
        border: true
        entity: input_number.red_meat_probe_alarm_temp
        min: 60
        max: 225
        unit: F
        speed: 200
        icon_plus: mdi:chevron-up
        icon_minus: mdi:chevron-down
        delay: 750
        step: 5
        card_mod:
          style: >
            .cur-num{font-size:20px !important}

            .cur-num.upd{color:green}

            .cur-unit{color:orange; font-size:100% !important; opacity:1
            !important}

            .grid-left{color:red}

            .grid-right{color:red}

            .cur-box ha-icon{transform:scale(2)}
        visibility:
          - condition: state
            entity: automation.alarm_red_meat_probe_temp_reached
            state: "on"
cards: []
icon: mdi:alarm

Battery graphs tab:

type: sections
max_columns: 4
title: Alarms
path: alarms
sections:
 - type: grid
   cards:
     - type: custom:gauge-card-pro
       entity: sensor.rfx_black_temp
       entity2: input_number.black_meat_probe_alarm_temp
       needle: true
       min: "50"
       max: 210
       segments:
         - from: 50
           color: var(--dark-grey-color)
       inner:
         min: 50
         max: 210
         mode: needle
         gradient: true
         gradient_resolution: high
         segments:
           - from: 50
             color: var(--red-color)
           - from: 150
             color: var(--light-blue-color)
           - from: 200
             color: var(--light-blue-color)
           - from: 250
             color: var(--black-color)
       gradient: true
       gradient_resolution: high
       value_texts:
         primary: "{{ states(entity) | float | round(1) }}°F"
         secondary: "{{ states(entity2) | float | round(0) }}F"
         secondary_color: "#aaa"
       titles:
         primary: Black Probe
       visibility:
         - condition: state
           entity: automation.black_meat_probe_temp_reached
           state: "on"
     - type: custom:gauge-card-pro
       entity: sensor.rfx_orange_temp
       entity2: input_number.orange_meat_probe_alarm_temp
       needle: true
       min: "50"
       max: 210
       segments:
         - from: 50
           color: var(--orange-color)
       inner:
         min: 50
         max: 210
         mode: needle
         gradient: true
         gradient_resolution: high
         segments:
           - from: 50
             color: var(--red-color)
           - from: 150
             color: var(--light-blue-color)
           - from: 200
             color: var(--light-blue-color)
           - from: 250
             color: var(--black-color)
       gradient: true
       gradient_resolution: high
       value_texts:
         primary: "{{ states(entity) | float | round(1) }}°F"
         secondary: "{{ states(entity2) | float | round(0) }}F"
         secondary_color: "#aaa"
       titles:
         primary: Orange Probe
       visibility:
         - condition: state
           entity: automation.orange_meat_probe_temp_reached
           state: "on"
     - type: custom:gauge-card-pro
       entity: sensor.rfx_white_temp
       entity2: input_number.white_meat_probe_alarm_temp
       needle: true
       min: "50"
       max: 210
       segments:
         - from: 50
           color: var(--white-color)
       inner:
         min: 50
         max: 210
         mode: needle
         gradient: true
         segments:
           - from: 50
             color: var(--red-color)
           - from: 150
             color: var(--light-blue-color)
           - from: 200
             color: var(--light-blue-color)
           - from: 250
             color: var(--black-color)
         gradient_resolution: medium
       gradient: true
       gradient_resolution: high
       value_texts:
         primary: "{{ states(entity) | float | round(1) }}°F"
         secondary: "{{ states(entity2) | float | round(0) }}F"
         secondary_color: "#aaa"
       titles:
         primary: White Probe
       visibility:
         - condition: state
           entity: automation.alarm_white_meat_probe_temp_reached
           state: "on"
     - type: custom:gauge-card-pro
       entity: sensor.rfx_red_temp
       entity2: input_number.red_meat_probe_alarm_temp
       needle: true
       min: "50"
       max: 208
       segments:
         - from: 50
           color: var(--red-color)
       inner:
         min: 50
         max: 210
         mode: needle
         gradient: true
         segments:
           - from: 50
             color: var(--red-color)
           - from: 150
             color: var(--light-blue-color)
           - from: 200
             color: var(--light-blue-color)
           - from: 250
             color: var(--black-color)
         gradient_resolution: medium
       gradient: true
       gradient_resolution: high
       value_texts:
         primary: "{{ states(entity) | float | round(1) }}°F"
         secondary: "{{ states(entity2) | float | round(0) }}F"
         secondary_color: "#aaa"
       titles:
         primary: Red Probe
       visibility:
         - condition: state
           entity: automation.alarm_red_meat_probe_temp_reached
           state: "on"
   column_span: 4
 - type: grid
   cards:
     - type: heading
       heading: Enable Which Probes
       heading_style: title
     - type: entities
       entities:
         - entity: automation.black_meat_probe_temp_reached
         - entity: automation.orange_meat_probe_temp_reached
         - entity: automation.alarm_white_meat_probe_temp_reached
         - entity: automation.alarm_red_meat_probe_temp_reached
 - type: grid
   cards:
     - type: heading
       heading: Set Alarm Temp
       heading_style: title
     - type: custom:numberbox-card
       border: true
       entity: input_number.black_meat_probe_alarm_temp
       min: 60
       max: 225
       unit: F
       speed: 200
       icon_plus: mdi:chevron-up
       icon_minus: mdi:chevron-down
       delay: 750
       step: 5
       card_mod:
         style: >
           .cur-num{font-size:20px !important}

           .cur-num.upd{color:green}

           .cur-unit{color:orange; font-size:100% !important; opacity:1
           !important}

           .grid-left{color:grey}

           .grid-right{color:grey}

           .cur-box ha-icon{transform:scale(2)}
       visibility:
         - condition: state
           entity: automation.black_meat_probe_temp_reached
           state: "on"
     - type: custom:numberbox-card
       border: true
       entity: input_number.orange_meat_probe_alarm_temp
       min: 60
       max: 225
       unit: F
       speed: 200
       icon_plus: mdi:chevron-up
       icon_minus: mdi:chevron-down
       delay: 750
       step: 5
       card_mod:
         style: >
           .cur-num{font-size:20px !important}

           .cur-num.upd{color:green}

           .cur-unit{color:orange; font-size:100% !important; opacity:1
           !important}

           .grid-left{color:yellow}

           .grid-right{color:orange}

           .cur-box ha-icon{transform:scale(2)}
       visibility:
         - condition: state
           entity: automation.orange_meat_probe_temp_reached
           state: "on"
     - type: custom:numberbox-card
       border: true
       entity: input_number.white_meat_probe_alarm_temp
       min: 60
       max: 225
       unit: F
       speed: 200
       icon_plus: mdi:chevron-up
       icon_minus: mdi:chevron-down
       delay: 750
       step: 5
       card_mod:
         style: >
           .cur-num{font-size:20px !important}

           .cur-num.upd{color:green}

           .cur-unit{color:orange; font-size:100% !important; opacity:1
           !important}

           .grid-left{color:white}

           .grid-right{color:}

           .cur-box ha-icon{transform:scale(2)}
       visibility:
         - condition: state
           entity: automation.alarm_white_meat_probe_temp_reached
           state: "on"
     - type: custom:numberbox-card
       border: true
       entity: input_number.red_meat_probe_alarm_temp
       min: 60
       max: 225
       unit: F
       speed: 200
       icon_plus: mdi:chevron-up
       icon_minus: mdi:chevron-down
       delay: 750
       step: 5
       card_mod:
         style: >
           .cur-num{font-size:20px !important}

           .cur-num.upd{color:green}

           .cur-unit{color:orange; font-size:100% !important; opacity:1
           !important}

           .grid-left{color:red}

           .grid-right{color:red}

           .cur-box ha-icon{transform:scale(2)}
       visibility:
         - condition: state
           entity: automation.alarm_red_meat_probe_temp_reached
           state: "on"
cards: []
icon: mdi:alarm

Automations (create one for each probe)

alias: "Alarm: Black Meat Probe Temp reached"
description: ""
triggers:
  - trigger: numeric_state
    entity_id:
      - sensor.rfx_black_temp
    above: input_number.black_meat_probe_alarm_temp
conditions:
  - condition: numeric_state
    entity_id: sensor.rfx_black_temp
    above: input_number.black_meat_probe_alarm_temp
    enabled: true
actions:
  - data:
      message: >-
        Black Meat Probe temperature is {{ states("sensor.rfx_black_temp") |
        round(0) }} degrees
    action: script.new_script
  - data:
      message: Black Probe temp is {{ states("sensor.rfx_black_temp") | round(0) }}F
    action: notify.mobile_app_jeff_s
mode: single

Create these helpers:


And finally, these template sensors to your sensor configuration

  - platform: template
    sensors:
      rfx_black_temp:
        friendly_name: 'RFX Black Temp'
        unit_of_measurement: '°F'
        value_template: >
          {% set sensors = [
            states('sensor.m100094926_ch_1_temperature'),
            states('sensor.m100094926_ch_2_temperature'),
            states('sensor.m100094926_ch_3_temperature'),
            states('sensor.m100094926_ch_4_temperature')
          ] %}
          {% set valid_sensors = sensors | select('is_number') | map('float') | list %}
          {% if valid_sensors | length > 0 %}
            {{ ((valid_sensors | sum) / (valid_sensors | length)) | round(1) }}
          {% else %}
            unavailable
          {% endif %}
      rfx_orange_temp:
        friendly_name: 'RFX Orange Temp'
        unit_of_measurement: '°F'
        value_template: >
          {% set sensors = [
            states('sensor.m100130697_ch_1_temperature'),
            states('sensor.m100130697_ch_2_temperature'),
            states('sensor.m100130697_ch_3_temperature'),
            states('sensor.m100130697_ch_4_temperature')
          ] %}
          {% set valid_sensors = sensors | select('is_number') | map('float') | list %}
          {% if valid_sensors | length > 0 %}
            {{ ((valid_sensors | sum) / (valid_sensors | length)) | round(1) }}
          {% else %}
            unavailable
          {% endif %}          
      rfx_red_temp:
        friendly_name: 'RFX Red Temp'
        unit_of_measurement: '°F'
        value_template: >
          {% set sensors = [
            states('sensor.m100087340_ch_1_temperature'),
            states('sensor.m100087340_ch_2_temperature'),
            states('sensor.m100087340_ch_3_temperature'),
            states('sensor.m100087340_ch_4_temperature')
          ] %}
          {% set valid_sensors = sensors | select('is_number') | map('float') | list %}
          {% if valid_sensors | length > 0 %}
            {{ ((valid_sensors | sum) / (valid_sensors | length)) | round(1) }}
          {% else %}
            unavailable
          {% endif %}          

Sheesh, it took me almost as long to write this post as it took to program all of it :slight_smile:

But I use this A LOT. There’s cooking before RFX and then there’s real cooking after having RFX.

Thanks for posting your YAML code. I tried recreating the RFX tabs in my HA instance, but it looks like the code you posted for the individual probe graphs and the battery graphs tab is exactly the same as the overview tab code posted (for alarms). Any chance you can check that and repost the probe and battery graph YAML? Thanks!

Try this

Probes

type: panel
    defaults:
      entity:
        show_value: true
      yaxes:
        side: left
        overlaying: "y"
        visible: true
        showgrid: true
        fixedrange: true
    entities:
      - entity: sensor.rfx_red_temp
        internal: >-
          $ex hass.states['automation.alarm_red_meat_probe_temp_reached'].state
          !== 'on' 
        name: RFX Red
        line:
          color: red
          shape: spline
          width: 1
          smoothing: 0
      - entity: sensor.rfx_black_temp
        internal: >-
          $ex hass.states['automation.black_meat_probe_temp_reached'].state !==
          'on' 
        name: RFX Black
        line:
          color: grey
          shape: spline
          width: 1
          smoothing: 0
      - entity: sensor.rfx_white_temp
        internal: >-
          $ex
          hass.states['automation.alarm_white_meat_probe_temp_reached'].state
          !== 'on' 
        name: RFX White
        color: white
        line:
          color: white
          shape: spline
          width: 1
          smoothing: 0
      - entity: sensor.rfx_orange_temp
        internal: >-
          $ex hass.states['automation.orange_meat_probe_temp_reached'].state !==
          'on' 
        name: RFX Orange
        color: white
        line:
          color: orange
          shape: spline
          width: 1
          smoothing: 0
    refresh_interval: 10
    hours_to_show: 1
    layout:
      grid:
        rows: 1
        columns: 1
        pattern: coupled
        roworder: top to bottom
      margin:
        r: 60
      height: 800
      xaxis:
        rangeselector:
          bgcolor: "#474747"
          "y": 1.06
          buttons:
            - count: 15
              step: minute
            - count: 30
              step: minute
            - count: 1
              step: hour
            - count: 2
              step: hour
            - count: 3
              step: hour
            - count: 12
              step: hour
            - count: 24
              step: hour
    height: 300
    autorange_after_scroll: true

Batteries

type: panel
path: ""
cards:
  - type: custom:plotly-graph
    defaults:
      entity:
        show_value: true
      yaxes:
        side: left
        overlaying: "y"
        visible: true
        showgrid: true
        fixedrange: false
    entities:
      - entity: sensor.m100087340_battery
        name: Red Battery
        yaxis: y1
        line:
          color: red
          shape: spline
          width: 2
          smoothing: 0
      - entity: sensor.m100094926_battery
        name: Black Battery
        yaxis: y2
        line:
          color: grey
          shape: spline
          width: 2
          smoothing: 0
      - entity: sensor.m100130696_battery
        name: White Battery
        yaxis: y3
        line:
          color: white
          shape: spline
          width: 2
          smoothing: 0
      - entity: sensor.m100130697_battery
        name: Orange Battery
        yaxis: y4
        line:
          color: orange
          shape: spline
          width: 2
          smoothing: 0
    refresh_interval: 10
    hours_to_show: 1
    layout:
      grid:
        rows: 4
        columns: 1
        pattern: coupled
        roworder: top to bottom
      margin:
        r: 100
      height: 800
      xaxis:
        rangeselector:
          bgcolor: "#474747"
          "y": 1.05
          buttons:
            - count: 15
              step: minute
            - count: 30
              step: minute
            - count: 1
              step: hour
            - count: 2
              step: hour
            - count: 3
              step: hour
            - count: 12
              step: hour
            - count: 24
              step: hour
      yaxis:
        visible: true
        fixedrange: true
        range:
          - 0
          - 100
      yaxis2:
        visible: true
        fixedrange: true
        range:
          - 0
          - 100
      yaxis3:
        visible: true
        fixedrange: true
        range:
          - 0
          - 100
      yaxis4:
        visible: true
        fixedrange: true