Como publicar os preços dos combustíveis no seu Home Assistant

Isto vai lá com o RESTfull no configuration.yaml.

rest:
  - scan_interval: 60
    resource: https://precoscombustiveis.dgeg.gov.pt/api/PrecoComb/GetDadosPostoMapa?id=65949&f=json
    sensor:
      - name: "Dados do posto 65949"
        json_attributes_path: "$.resultado"
        value_template: "OK"
        json_attributes:
          - "Nome"
          - "Marca"'

Verifiquem a configuração e, em vez de fazer restart ao home-assistant, basta no Server Controlo selecionar “REST entities and notify services”.

eheheh Só falta ver como faço para gerar um item por cada tipo de combustivel.

Estou a testar aqui https://jqplay.org/ com o JSON obtido do próprio posto nos URL acima.

2 Curtiram

Não tens de pedir desculpa o projecto está tudo top. isto dá me imenso jeito porque tenho uma automação que envio msg ao telegram e eles responde o preço dos postos respectivos aos preço a que está o combustível dá imenso jeito!

bem… algumas voltas depois, desisti de usar o rest: e passei a usar o sensor platform: rest. É parvo, mas funciona…

No exemplo abaixo, a primeira posição ([0]) do posto 66099 é o Gasóleo Simples, e a terceira ([2]) é a gasolina sem chumbo 95.

Inserindo na secção sensor a configuração abaixo, devolve o preço nesse posto:

sensor:
  - platform: rest
    resource: https://precoscombustiveis.dgeg.gov.pt/api/PrecoComb/GetDadosPostoMapa?id=66099&f=json
    name: "fuel_posto_66099_bp_montijo_gasoleo_simples"
    scan_interval: 3600
    value_template: '{{ float(value_json.resultado.Combustiveis[0].Preco | regex_replace(find=" €/litro", replace="", ignorecase=True) | regex_replace(find=",", replace=".", ignorecase=True),default) }}'
    unit_of_measurement: '€'
  - platform: rest
    resource: https://precoscombustiveis.dgeg.gov.pt/api/PrecoComb/GetDadosPostoMapa?id=66099&f=json
    name: "fuel_posto_66099_bp_montijo_gasolina_95"
    scan_interval: 3600
    value_template: '{{ float(value_json.resultado.Combustiveis[2].Preco | regex_replace(find=" €/litro", replace="", ignorecase=True) | regex_replace(find=",", replace=".", ignorecase=True),default) }}'
    unit_of_measurement: '€'

Não esquecer de no Server Controlo selecionar “REST entities and notify services” para recarregar os valores.

O que é feito no value_template:

  • float: Converte o resultado do value_json num décimal
  • | regex_replace: substitui o texto " €/litro" e “,”

Depois de costumizar o icon (mdi:fuel) e o nome das entidades fica com alguma apresentação.

4 Curtiram

Thanks, tás mesmo valente.
:grin:

Fazendo uso dessa forma ficou perfeito! Só tem que atentar as posições do combustivel, que pode variar de bomba para bomba.

Fiz assim no node red, e sempre que criar um sensor que comece com fuel ele já adiciona à mensagem enviada ao telegram

1 Curtiu

Confirmo que funciona @designerferro ! ^

@IvanMB uqeres partilhas esse flow sff

1 Curtiu

Claro! Não sei se estará certo assim, mas diga se conseguiu:

[{"id":"5826d8eb4440a1cc","type":"ha-get-entities","z":"e88d503894cd9520","name":"Todos postos","server":"abc975db.c3cef8","version":0,"rules":[{"property":"entity_id","logic":"starts_with","value":"sensor.fuel_","valueType":"str"}],"output_type":"split","output_empty_results":false,"output_location_type":"msg","output_location":"payload","output_results_count":1,"x":370,"y":80,"wires":[["9f33c447e3c56f58"]]},{"id":"9f33c447e3c56f58","type":"template","z":"e88d503894cd9520","name":"Formatação","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"{{payload.attributes.friendly_name}}: {{payload.state}} {{payload.attributes.unit_of_measurement}}","output":"str","x":590,"y":80,"wires":[["cf0d19e209fbf3d6"]]},{"id":"cf0d19e209fbf3d6","type":"join","z":"e88d503894cd9520","name":"","mode":"auto","build":"string","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":false,"timeout":"","count":"6","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"num","reduceFixup":"","x":770,"y":80,"wires":[["9e64f418948f316c"]]},{"id":"5c3d6af80b88322e","type":"telegrambot-notify","z":"e88d503894cd9520","name":"","bot":"b2666c6c68168d2f","chatId":"","message":"","parseMode":"","x":1160,"y":80,"wires":[]},{"id":"33e70daeb7b90177","type":"telegrambot-command","z":"e88d503894cd9520","name":"/combustivel","bot":"b2666c6c68168d2f","command":"/combustivel","commandType":"str","commandCase":false,"x":150,"y":80,"wires":[["5826d8eb4440a1cc"]]},{"id":"9e64f418948f316c","type":"function","z":"e88d503894cd9520","name":"array to string","func":"msg.payload = msg.payload.join(\"\\n\")\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":960,"y":80,"wires":[["5c3d6af80b88322e"]]},{"id":"abc975db.c3cef8","type":"server","name":"Home Assistant","version":2,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":30},{"id":"b2666c6c68168d2f","type":"telegrambot-config","botname":"BotName","usernames":"","chatIds":"chatId1, chatId2","pollInterval":"300"}]

Lembrando que tens que ter configurado o Telegram préviamente

Obrigado Ivan.
Top.
Boa ideia sim.

a funcar … thanks … :wink:

Muito obrigado!
Deixo o meu cenário, já agora usei o custom:auto-entities para ordenar os preços do menor para o maior.

2 Curtiram

Deixa ver se percebo: vocês falam ou escrevem com o vosso Home-assistant através do Telegram?

Eu escrevo /combustivel no meu bot no telegram e ele responde com os valores obtidos pela automação, exatamente como na figura que postei acima. Era isso que queria perceber ou entendi mal? :smiley:

Era mesmo isso. Eu falo com a Siri. Tenho tudo integrado no Homekit.

Ah sim, normalmente eu falo pela alexa. Mas para essa cena dos combustíveis, acho que da mais jeito o telegram. Imagina a alexa falando durante 2 minutos os preços todos? haha

1 Curtiu

Sim, para mandar abrir o portão, ligar/desligar o alarme, pedir imagens de cctv, etc. Dá jeito :slight_smile:

1 Curtiu

Olá .

É possível partilhar como é que fizeste para ordenar os valores?

Obrigado

Olá

Usei um cartão personalizado do HACS auto-entities
https://github.com/thomasloven/lovelace-auto-entities

O código de um dos cartões

type: custom:auto-entities
card:
  type: entities
  title: Gasolina Simples 95
filter:
  include:
    - entity_id: /sensor\..*_gasolina_simples_95/
sort:
  method: state
  numeric: true
  reverse: false
1 Curtiu

Meu deus a evolução dos preços desde a data que publiquei!

1 Curtiu

Boas!

Não quero fazer um highjack da implementação REST, mas para os interessados, eu crei uma integração que torna o processo bem mais simples, podem seguir esta thread Preços dos Combustíveis - #3 por RuiDias para mais informações.

BTW: A minha implementação foi baseado nesta em REST, espero que o(s) autor(s) não se importe

1 Curtiu

Faz o “Highjack”. Vou experimentar o que fizeste porque há sempre interessados para este tipo de integrações e que não sabem muito bem como “hackar” a coisa.

1 Curtiu

Copyright © 2017-2021. Todos os direitos reservados
CPHA.pt - info@cpha.pt


FAQ | Termos de Serviço/Regras | Política de Privacidade