添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

How to do this,
the reason why i’m trying is that the REST platform doesn’t support variables in the payload and that’s really annoying

I’m using payed version of 17track and created a command that registers the package number, that works really great.

However i need to use this code to return the data.
but how to return the data when executed ??

shell_command:
track_17_details: ‘curl -X POST --header “17token: MYAPI” --header “Content-Type: application/json” --data “[ { “number”: “{{ number }}”, “carrier”: “{{carrier}}” } ]” https://api.17track.net/track/v2/gettrackinfo

In the rest api it does return when manually input the trackingcode, but like said before variables dont work, and i cant find a way arround it… only using shell_command…

SO what i want is that the shellcommand returns the data in a entity like rest does, is that possible ?

I do it by putting the command in a bash script and then (in the script) calling the HA API. Here is an example :

The shell command:

shell_command:
  get_aircraft_reg: bash /config/scripts/aircraft_reg.sh {{states('sensor.low_level_registration')}}

The bash script:

#!/bin/sh
echo $1
curl --request GET --url https://hexdb.io/api/v1/aircraft/$1 > /tmp/aircraft_reg && sed -i 's/Registration/state/g' /tmp/aircraft_reg | curl -X POST -H 'Authorization: Bearer Your Token' -H 'Content-Type: application/json'  -d @/tmp/aircraft_reg  http://192.168.1.25:8123/api/states/sensor.aircraft_reg

I hope this gives you an idea of what you can do :slight_smile:

Alternatively, you can use a rest sensor like this :

rest:
   - resource_template: https://api.spotify.com/v1/search?q={{ states('sensor.media_title_office')|default('')|replace(' ','%20')|replace("'",'%27') |replace(':','%3A') }}%2C%20{{ states('sensor.media_artist_office') |default('')|replace(' ','%20')|replace("'",'%27')|replace(':','%3A')|regex_replace('\([0-9]+\)')}}&type=track%2Cartist&limit=1
     headers:
       Authorization: Bearer {{ state_attr("sensor.spotify_token","access_token") }}
       Content-Type: application/json
       Accept: application/json
     scan_interval: 1800
     sensor:
       - name: spotify_url_rest
         unique_id: sur
         value_template: 'OK'
         json_attributes_path: "$.tracks.items[0].external_urls"
         json_attributes:
           - spotify
       - name: spotify_track_rest
         unique_id: str
         value_template: 'OK'
         json_attributes_path: "$.tracks.items[0]"
         json_attributes:
           - name
       - name: spotify_artist_rest
         unique_id: sar
         value_template: 'OK'
         json_attributes_path: "$.tracks.items[0].artists[0]"
         json_attributes:
           - name
       - name: spotify_album_rest
         unique_id: sal
         value_template: 'OK'
         json_attributes_path: "$.tracks.items[0].album"
         json_attributes:
           - name

Set the scan interval to something like 3600 and then just call the refresh like this :

action:
  - delay:
      hours: 0
      minutes: 0
      seconds: 5
      milliseconds: 0
  - service: homeassistant.update_entity
    data: {}
    target:
      entity_id:
        - sensor.spotify_artist_rest
        - sensor.spotify_track_rest_3
        - sensor.spotify_url_rest
        - sensor.spotify_album_rest
              

many many thanks @Neil_Brownlee

as i want to keep it simple, how can i modify the rest sensor like you did ?
i have something like this:
but don’t know how to get arround the payload.

If i manually fill in the number and carrier this works, however no variables.

rest:

  • authentication: basic
    scan_interval: 86400
    resource: https://api.17track.net/track/v2/register
    method: POST
    headers:
    content-type: application/json
    17token: MYAPI
    payload: |
    “number”: “{{ states(‘input.track_17_carrier_number’) }}”,
    “carrier”: “{{ states(‘sensor.track_17_carrier_mapping’) }}”
    sensor:
  • name: track_17_reg
    value_template: “{{ value_json }}”
  • i also did try an other approach but im stuck.
    i did use the command_line platform to capture the output.

    sensor:

  • platform: command_line
    name: tracking_details
    command: “bash -c ‘{{ shell_command.get_tracking_details }}’”
    value_template: “{{ value_json }}”
  • however this throws me errors.

    and using this way ?
    i tried but getting errors.
    as it should work this way… just sad the devs do not allow variables in the payload…

    sensor:

  • platform: command_line
    name: tracking_details
    command: “bash -c ‘{{ shell_command.get_tracking_details }}’”
    value_template: “{{ value_json }}”
  • - platform: command_line name: command: curl -s 'http://SMART_METER_IP/inst.json' | jq .type_imp_0 scan_interval: 60 you can do a lot with the command sensor - I query my local transporter wit it. # https://www.data.gv.at/katalog/dataset/add66f20-d033-4eee-b9a0-47019828e698 # data.wien.gv.at' Lizenz (CC BY 3.0 AT) # the comand is as following: # curl -s 'http://www.wienerlinien.at/ogd_realtime/monitor?rbl=******STOP-HERE******&send…

    i forget, here is my solution to this problem

    i created this to run the same command as i did in rest with command_line and it’s basically the same except u can use variables in the payload.

    command_line:

    sensor:
    name: tracktest
    scan_interval: 9000
    json_attributes:
    - data

    command: >-
    curl -X POST --header “17token: MYTOKEN” --header “Content-Type: application/json” --data “[ { “number”: “{{ states(‘input_text.17_track_code_input’) }}”, “carrier”: “{{ states(‘input_text.17_track_carried_input’) }}” } ]” https://api.17track.net/track/v2/gettrackinfo
    value_template: “{{ value_json.data.tracking_result }}”