Medição de Energia com Placa JE05 + MQTT

Eu comprei um JE05 semana passada, e ele veio com a nova versão, pelo visto. O firmware dele é o 3.00. Agora realmente os dados vêm em um único pacote MQTT, tendo que retirar os dados dele.

sensor:
############## JE05 ############################
#“VARMS”:0, → Valor de Tensão RMS da Fase A
  - platform: mqtt
	name: "JE05 VRMS-A"
	state_topic: "JE05/pub"
	icon: mdi:alpha-v-circle-outline
	unit_of_measurement: 'V'
	value_template: '{{value_json.DATA.VARMS}}'
#“VBRMS”:0, → Valor de Tensão RMS da Fase B
  - platform: mqtt
	name: "JE05 VRMS-B"
	state_topic: "JE05/pub"
	icon: mdi:alpha-v-circle-outline
	unit_of_measurement: 'V'
	value_template: '{{value_json.DATA.VBRMS}}'
#“VCRMS”:0, → Valor de Tensão RMS da Fase C
  - platform: mqtt
	name: "JE05 VRMS-C"
	state_topic: "JE05/pub"
	icon: mdi:alpha-v-circle-outline
	unit_of_measurement: 'V'
	value_template: '{{value_json.DATA.VCRMS}}'
#“IARMS”:0, → Valor de Corrente RMS da Fase A
  - platform: mqtt
	name: "JE05 IRMS-A"
	state_topic: "JE05/pub"
	icon: mdi:alpha-a-circle-outline
	unit_of_measurement: 'A'
	value_template: '{{value_json.DATA.IARMS / 10 | float}}'
#“IBRMS”:0, → Valor de Corrente RMS da Fase B
  - platform: mqtt
	name: "JE05 IRMS-B"
	state_topic: "JE05/pub"
	icon: mdi:alpha-a-circle-outline
	unit_of_measurement: 'A'
	value_template: '{{value_json.DATA.IBRMS / 10 | float}}'
#“ICRMS”:0, → Valor de Corrente RMS da Fase C
  - platform: mqtt
	name: "JE05 IRMS-C"
	state_topic: "JE05/pub"
	icon: mdi:alpha-a-circle-outline
	unit_of_measurement: 'A'
	value_template: '{{value_json.DATA.ICRMS / 10 | float}}'
#“VABRMS”:0, → Valor de Tensão RMS entre Fase A e B
#“VBCRMS”:0, → Valor de Tensão RMS entre Fase B e C
#“VCARMS”:0, → Valor de Tensão RMS entre Fase C e A
#“VABCTRMS”:0, → Valor de Tensão RMS da linha Trifásica
#“PA”:0, → Valor da potência ativa instantâneo da Fase A
  - platform: mqtt
	name: "JE05 PATIVA-A"
	state_topic: "JE05/pub"
	icon: mdi:flash
	unit_of_measurement: 'W'
	value_template: '{{value_json.DATA.PA}}'
#“PB”:0, → Valor da potência ativa instantâneo da Fase B
  - platform: mqtt
	name: "JE05 PATIVA-B"
	state_topic: "JE05/pub"
	icon: mdi:flash
	unit_of_measurement: 'W'
	value_template: '{{value_json.DATA.PB}}'
#“PC”:0, → Valor da potência ativa instantâneo da Fase C
  - platform: mqtt
	name: "JE05 PATIVA-C"
	state_topic: "JE05/pub"
	icon: mdi:flash
	unit_of_measurement: 'W'
	value_template: '{{value_json.DATA.PC}}'
#“PT”:0, → Valor da potência ativa instantâneo Total
  - platform: mqtt
	name: "JE05 PATIVA-TOTAL"
	state_topic: "JE05/pub"
	icon: mdi:flash
	unit_of_measurement: 'W'
	value_template: '{{value_json.DATA.PT}}'
#“QA”:0, → Valor da potência reativa instantâneo da Fase A
  - platform: mqtt
	name: "JE05 PREATIVA-A"
	state_topic: "JE05/pub"
	icon: mdi:flash
	unit_of_measurement: 'VAr'
	value_template: '{{value_json.DATA.QA}}'
#“QB”:0, → Valor da potência reativa instantâneo da Fase B
  - platform: mqtt
	name: "JE05 PREATIVA-B"
	state_topic: "JE05/pub"
	icon: mdi:flash
	unit_of_measurement: 'VAr'
	value_template: '{{value_json.DATA.QB}}'
#“QC”:0, → Valor da potência reativa instantâneo da Fase C
  - platform: mqtt
	name: "JE05 PREATIVA-C"
	state_topic: "JE05/pub"
	icon: mdi:flash
	unit_of_measurement: 'VAr'
	value_template: '{{value_json.DATA.QC}}'
#“QT”:0, → Valor da potência reativa instantâneo total
  - platform: mqtt
	name: "JE05 PREATIVA-TOTAL"
	state_topic: "JE05/pub"
	icon: mdi:flash
	unit_of_measurement: 'VAr'
	value_template: '{{value_json.DATA.QT}}'
#“SA”:0, → Valor da potência aparente instantâneo da Fase A
  - platform: mqtt
	name: "JE05 PAPARENTE-A"
	state_topic: "JE05/pub"
	icon: mdi:flash
	unit_of_measurement: 'VA'
	value_template: '{{value_json.DATA.SA}}'
#“SB”:0, → Valor da potência aparente instantâneo da Fase B
  - platform: mqtt
	name: "JE05 PAPARENTE-B"
	state_topic: "JE05/pub"
	icon: mdi:flash
	unit_of_measurement: 'VA'
	value_template: '{{value_json.DATA.SB}}'
#“SC”:0, → Valor da potência aparente instantâneo da Fase C
  - platform: mqtt
	name: "JE05 PAPARENTE-C"
	state_topic: "JE05/pub"
	icon: mdi:flash
	unit_of_measurement: 'VA'
	value_template: '{{value_json.DATA.SC}}'
#“ST”:0, → Valor da potência aparente instantâneo total
  - platform: mqtt
	name: "JE05 PAPARENTE-TOTAL"
	state_topic: "JE05/pub"
	icon: mdi:flash
	unit_of_measurement: 'VA'
	value_template: '{{value_json.DATA.ST}}'
#“FPA”:0, → Valor do fator de potência da Fase A
  - platform: mqtt
	name: "JE05 FP-A"
	state_topic: "JE05/pub"
	icon: mdi:alpha-f-circle-outline
	value_template: '{{value_json.DATA.FPA / 1000 | float}}'
#“FPB”:0, → Valor do fator de potência da Fase B
  - platform: mqtt
	name: "JE05 FP-B"
	state_topic: "JE05/pub"
	icon: mdi:alpha-f-circle-outline
	value_template: '{{value_json.DATA.FPB / 1000 | float}}'
#“FPC”:0, → Valor do fator de potência da Fase C
  - platform: mqtt
	name: "JE05 FP-C"
	state_topic: "JE05/pub"
	icon: mdi:alpha-f-circle-outline
	value_template: '{{value_json.DATA.FPC / 1000 | float}}'
#“FPT”:0, → Valor do fator de potência total
  - platform: mqtt
	name: "JE05 FP-TOTAL"
	state_topic: "JE05/pub"
	icon: mdi:alpha-f-circle-outline
	value_template: '{{value_json.DATA.FPT / 1000 | float}}'
#“KVARHA”:0, → Valor do consumo reativo acumulado da Fase A
#  - platform: mqtt
#    name: "JE05 KVARH-A"
#    state_topic: "JE05/pub"
#    icon: mdi:transmission-tower
#    unit_of_measurement: 'kVAh'
#    value_template: '{{value_json.DATA.KVARHA / 1000 | float}}'
#“KVARHB”:0, → Valor do consumo reativo acumulado da Fase B
#  - platform: mqtt
#    name: "JE05 KVARH-B"
#    state_topic: "JE05/pub"
#    icon: mdi:transmission-tower
#    unit_of_measurement: 'kVAh'
#    value_template: '{{value_json.DATA.KVARHB / 1000 | float}}'
#“KVARHC”:0, → Valor do consumo reativo acumulado da Fase C
#  - platform: mqtt
#    name: "JE05 KVARH-C"
#    state_topic: "JE05/pub"
#    icon: mdi:transmission-tower
#    unit_of_measurement: 'kVAh'
#    value_template: '{{value_json.DATA.KVARHC / 1000 | float}}'
#“KVARHT”:0, → Valor do consumo reativo acumulado total
#  - platform: mqtt
#    name: "JE05 KVARH-TOTAL"
#    state_topic: "JE05/pub"
#    icon: mdi:transmission-tower
#    unit_of_measurement: 'kVAh'
#    value_template: '{{value_json.DATA.KVARHT / 1000 | float}}'
#“KWHA”:0, → Valor do consumo ativo acumulado da Fase A
  - platform: mqtt
	name: "JE05 KWH-A"
	state_topic: "JE05/pub"
	icon: mdi:transmission-tower
	unit_of_measurement: 'kWh'
	value_template: '{{value_json.DATA.KWHA / 1000 | float}}'
#“KWHB”:0, → Valor do consumo ativo acumulado da Fase B
  - platform: mqtt
	name: "JE05 KWH-B"
	state_topic: "JE05/pub"
	icon: mdi:transmission-tower
	unit_of_measurement: 'kWh'
	value_template: '{{value_json.DATA.KWHB / 1000 | float}}'
#“KWHC”:0, → Valor do consumo ativo acumulado da Fase C
  - platform: mqtt
	name: "JE05 KWH-C"
	state_topic: "JE05/pub"
	icon: mdi:transmission-tower
	unit_of_measurement: 'kWh'
	value_template: '{{value_json.DATA.KWHC / 1000 | float}}'
#“KWHT”:0, → Valor do consumo ativo acumulado total
  - platform: mqtt
	name: "JE05 KWH-TOTAL"
	state_topic: "JE05/pub"
	icon: mdi:transmission-tower
	unit_of_measurement: 'kWh'
	value_template: '{{value_json.DATA.KWHT / 1000 | float}}'
#“FREQ”:0, → Frequência da linha trifásica
  - platform: mqtt
	name: "JE05 Frequência"
	state_topic: "JE05/pub"
	icon: mdi:chart-bell-curve
	unit_of_measurement: 'Hz'
	value_template: '{{value_json.DATA.FREQ / 100 | float}}'
#“TEMP”:0, → Valor da temperatura do DS18B20 (-354 = -35.4 °C)
#“SERRS”:0, → Contador de erros de leitura do sensor DS18B20
#“WRSSI”:0, → Nível de sinal wifi (-20 muito bom)(-90 muito ruim)
  - platform: mqtt
	name: "JE05 WIFI"
	state_topic: "JE05/pub"
	icon: mdi:access-point-network
	unit_of_measurement: 'dbm'
	value_template: '{{value_json.DATA.WRSSI}}'
#“UPTIME”:0 → Tempo em segundos em o produto está ligado

Eu moro na Cidade do Rio, e minha intenção era, além de monitorar, descobrir se a tarifa branca (que varia o valor de acordo com o horário) era mais barata para mim. Então criei os seguintes componentes:

A variável sensor.fatura_energia me mostra o valor normal da conta, e a variável sensor.fatura_energia_branca o valor da tarifa branca.

sensor:
#Calculo do Custo a partir do utility meter
  - platform: template
	sensors:
	  fatura_energia_branca:
		friendly_name: "Energia Total Tarifa Branca"
		value_template: "{{ ( (float(states.sensor.tarifa_fora_ponta.state) * (float(states.input_number.tbf.state))) + (float(states.sensor.tarifa_ponta.state) * (float(states.input_number.tbp.state))) + (float(states.sensor.tarifa_intermediario.state) * (float(states.input_number.tbi.state))) ) | round(2) }}"
		unit_of_measurement: "R$"
	  fatura_energia:
		friendly_name: "Energia Total Tarifa Comum"
		value_template: "{{ ( (float(states.sensor.tarifa_fora_ponta.state) * (float(states.input_number.tar.state))) + (float(states.sensor.tarifa_ponta.state) * (float(states.input_number.tar.state))) + (float(states.sensor.tarifa_intermediario.state) * (float(states.input_number.tar.state))) ) | round(2) }}"
		unit_of_measurement: "R$"
		
		
utility_meter:
#Monitora o consumo de energia mensal
  tarifa:
	source: sensor.je05_kwh_total
	cycle: monthly
	offset:
	  days: 18
	  hours: 12
	  minutes: 0
	tariffs:
	  - fora_ponta
	  - ponta
	  - intermediario

#Variáveis com o Custo do kWh
input_number:
  tar:
	name: "Valor kW/h - Normal"
	initial: 0.99776
	min: 0
	max: 10
	step: 0.001
	unit_of_measurement: "R$"
	mode: box
  tbf:
	name: "Valor kW/h - Fora Ponta"
	initial: 0.88076
	min: 0
	max: 10
	step: 0.001
	unit_of_measurement: "R$"
	mode: box
  tbp:
	name: "Valor kW/h - Ponta"
	initial: 1.83751
	min: 0
	max: 10
	step: 0.001
	unit_of_measurement: "R$"
	mode: box
  tbi:
	name: "Valor kW/h - Intermediário"
	initial: 1.21587
	min: 0
	max: 10
	step: 0.001
	unit_of_measurement: "R$"
	mode: box

Também é necessário uma automação para mudar os valores das tarifas de acordo com os horários:

- id: '1591576451370'
  alias: Tarifa Fora Ponta
  description: ''
  trigger:
  - at: '22:30:01'
	platform: time
  condition: []
  action:
  - after: '22:30:00'
	before: '17:30:00'
	condition: time
  - data:
	  tariff: fora_ponta
	entity_id: utility_meter.tarifa
	service: utility_meter.select_tariff
- id: '1591576648494'
  alias: Tarifa Ponta
  description: ''
  trigger:
  - at: '17:30:01'
	platform: time
  condition: []
  action:
  - after: '17:30:00'
	before: '20:30:00'
	condition: time
  - data:
	  tariff: ponta
	entity_id: utility_meter.tarifa
	service: utility_meter.select_tariff
- id: '1591576690005'
  alias: Tarifa Intermediário
  description: ''
  trigger:
  - at: '20:30:01'
	platform: time
  condition: []
  action:
  - after: '20:30:00'
	before: '22:30:00'
	condition: time
  - data:
	  tariff: intermediario
	entity_id: utility_meter.tarifa
	service: utility_meter.select_tariff
- id: '1591579303863'
  alias: 'Tarifa: Atualizar ao Reiniciar'
  description: ''
  trigger:
  - event: start
	platform: homeassistant
  condition: []
  action:
  - data: {}
	entity_id: automation.tarifa_fora_ponta
	service: automation.trigger
  - data: {}
	entity_id: automation.tarifa_intermediario
	service: automation.trigger
  - data: {}
	entity_id: automation.tarifa_ponta
	service: automation.trigger

Como bônus, essa novo meio de coletar os dados te permite resetar o acumulador de kWh da placa:

#Automação para resetar os KWH acumuladors na placa JE05	
- id: '1591570404531'
  alias: Reset JE05
  description: Resetar os contadores de kWh do JE05
  trigger:
  - at: '12:00:00'
	platform: time
  condition:
  - condition: template
	value_template: '{{ now().day == 18 }}'
  action:
  - data:
	  payload: '{"RST":"KWH"}'
	  topic: JE05/sub
	service: mqtt.publish
  - data:
	  payload: '{"RST":"KVARH"}'
	  topic: JE05/sub
	service: mqtt.publish
7 curtidas