Ils existent plusieurs intégrations pour traquer des vols, mais je voullais un epu de contrôle. Via l’api de flightaware (gratuit si personel). J’ai reussi de faire ça
J’ai pas trouvé une solution avec qu’un sensor donc
- sensor poue les détails du vol
- sensor pour traquer
- input_text pour le vol
- carte combiné
Résultat:
Sensors
- platform: command_line
name: flight_single_id
unique_id: flight_single_id
scan_interval: 310
command: >
curl -X GET -H "x-apikey:YOUR_API_KEY" "https://aeroapi.flightaware.com/aeroapi/flights/{{ states('input_text.aircraft_id')}}?max_pages=1&start={{ utcnow().strftime("%F") }}&end={{ (now() + timedelta(days=1)).strftime('%F') }}" | jq '{flights: [.flights[] | select(.cancelled==false) | { flight: .ident, flight_fa: .fa_flight_id, flight_iata: .ident_iata, flight_fa_inbound: .inbound_fa_flight_id, origin_city: .origin.city, origin_name: .origin.name , aricraft: .aircraft_type , status: .status , arrival_gate: .gate_destination, arrival_terminal: .terminal_destination , destination_city: .destination.city, destination_name: .destination.name , scheduled_arrival: .scheduled_in, estimated_arrival: .estimated_in, arrival_delay: .arrival_delay }]}'
value_template: >
{{ value_json.flights | length }}
json_attributes:
- flights
- platform: command_line
name: flight_single_id_position
unique_id: flight_single_id_position
device_class: timestamp
scan_interval: 70
command: >
curl -X GET -H "x-apikey:YOUR_API_KEY" "https://aeroapi.flightaware.com/aeroapi/flights/{{state_attr('sensor.flight_single_id','flights').0.flight_fa }}/track" | jq '.positions | sort_by(.timestamp)|reverse | .[0] | {timestamp: .timestamp, latitude: .latitude, longitude: .longitude, altitude: .altitude, altitude_change: .altitude_change, groundspeed: .groundspeed}'
value_template: >
{{ value_json.timestamp }}
json_attributes:
- latitude
- longitude
- timestamp
- groundspeed
- altitude
- altitude_change
Carte
type: custom:stack-in-card
mode: vertical
cards:
- type: horizontal-stack
cards:
- type: entities
entities:
- entity: input_text.aircraft_id
- type: custom:button-card
show_name: true
show_icon: true
name: refresh
size: 20%
tap_action:
action: call-service
service: homeassistant.update_entity
service_data:
entity_id:
- sensor.flight_single_id
- sensor.flight_single_id_position
data: {}
icon: mdi:autorenew
- type: custom:flex-table-card
clickable: true
sort_by: state
max_rows: 15
entities:
include: sensor.flight_single_id
columns:
- name: Flight
data: flights
modify: x.flight
- name: Origin
data: flights
modify: x.origin_city
- name: Destination
data: flights
modify: x.destination_city
- name: Delay(min)
data: flights
modify: |
if(x.arrival_delay == 0)
{""}
else {
parseInt(x.arrival_delay / 60) }
- name: Arrival
data: flights
modify: |
if(x.estimated_arrival == null )
{"-"}
else {
var date = new Date(x.estimated_arrival);
String(date.getDate()).padStart(2,'0')+"/"+
(String(date.getMonth()+ 1).padStart(2,'0'))+
" "+
String(date.getHours()).padStart(2,'0')+":"+
String(date.getMinutes()).padStart(2,'0')
}
- type: map
entities:
- entity: sensor.flight_single_id_position
hours_to_show: 0.2
default_zoom: 10
auto_fit: true