/  Python Yamcs Client  /  Timeline

Timeline

The Timeline API provides methods that you can use to programmatically work with Yamcs bands and items.

Reference

Snippets

Create a TimelineClient for a specific instance:

from yamcs.client import YamcsClient

client = YamcsClient("localhost:8090")
timeline = client.get_timeline_client(instance="simulator")

Create a few Band objects:

from yamcs.client import ItemBand, TimeRuler

utc_time = TimeRuler()
utc_time.name = "UTC"
timeline.save_band(utc_time)

local_time = TimeRuler()
local_time.name = "Local"
local_time.timezone = "Europe/Brussels"
timeline.save_band(local_time)

group_a = ItemBand()
group_a.name = "Group A"
group_a.tags = ["group-a"]
timeline.save_band(group_a)

group_b = ItemBand()
group_b.name = "Group B"
group_b.tags = ["group-b"]
group_b.item_border_color = "#ff4500"
group_b.item_background_color = "#ffa500"
timeline.save_band(group_b)

Create some Item objects. Bands of type ItemBand will display items with matching tags:

from datetime import datetime, timedelta, timezone

from yamcs.client import Item

now = datetime.now(tz=timezone.utc)

for i in range(10):
    item = Item()
    item.name = f"A {i + 1}"
    item.start = now + timedelta(seconds=i * 7200)
    item.duration = timedelta(seconds=3600)
    item.tags = ["group-a"]
    timeline.save_item(item)

    item = Item()
    item.name = f"B {i + 1}"
    item.start = now + timedelta(seconds=3600 + (i * 7200))
    item.duration = timedelta(seconds=3600)
    item.tags = ["group-b"]
    timeline.save_item(item)

Create a View showing all bands:

from yamcs.client import View

view = View()
view.name = "Two groups"
view.bands = [utc_time, local_time, group_a, group_b]
timeline.save_view(view)

To update a Band, Item or View use the same save methods as for inserting. When saving or fetching these objects they are assigned a server identifier that is used to detect whether further saves require an insert or update.

group_a.description = "A few random items"
timeline.save_band(group_a)
for item in timeline.list_items():
    item.tags.append("example")
    timeline.save_item(item)

Create a view with ParameterStateBand and ParameterPlot bands:

from yamcs.client import (
    ParameterPlot,
    ParameterStateBand,
    RangeMapping,
    Trace,
    ValueMapping,
    View,
)

states = ParameterStateBand()
states.name = "State example"
states.parameter = "/YSS/SIMULATOR/BatteryVoltage2"
states.mappings.append(RangeMapping(40, 56, label="LOW", color="#ff0000"))
states.mappings.append(ValueMapping(57, label="OK", color="#00ff00"))
states.mappings.append(RangeMapping(58, 70, label="HIGH", color="#ff0000"))
timeline.save_band(states)

plot = ParameterPlot()
plot.name = "Plot example"
plot.maximum = 65
trace = Trace(
    parameter="/YSS/SIMULATOR/BatteryVoltage2",
    line_color="#ffff00",
    fill=True,
)
plot.traces.append(trace)
timeline.save_band(plot)

view = View()
view.name = "Parameter examples"
view.bands = [states, plot]
timeline.save_view(view)