Minimal Power Grid#
To get to learn Wattson, a minimal scenario allows you to inspect how a scenario looks like and how you can run a scenario.
In this example, you can learn how to simply run the scenario, how a custom script would look like, and how you can extend the scenario via Python scripts.
Scenario Components#
A scenario defines the topologies of the communication network, the characteristics of the physical process (e.g., the power grid), and how these two domains interact with eachother.
Per default, the Wattson module starts an already defined scenario that is passed to it as a parameter.
In particular, each scenario description, i.e., the representation of a scenario in a folder, consists of the following components and files:
The
scenario-type
file contains a string indicating what kind of scenario (e.g.,power-grid
) is representedThe
network.yml
contains a description of nodes, interfaces and linksThe
extensions.yml
contains a list of extensions to apply to the scenario. Usually, these are references to files in theextensions/
folder, each specifying a dedicated extensions. This could, for example, be the placement of an attacker host.
The following files are specific for scenarios of the power-grid
type:
The
facilities.yml
contains information on facilities in the power grid, such as distibution and transforming substations, offices, or households.The
power-grid.yml
contains the power grid model description. This is the PowerOwl representation.The
data-points.yml
contains information on the communication protocols used for the process network. E.g., it contains protocol specifications for multiple Remote Terminal Units (RTUs) and the Master Terminal Unit (MTU) in the control center. This defines their interaction and the link between a communication register and the physical devices in the power grid. As such, it maps a communication data point (e.g., COA 123 and IOA 45678) to a specific physical measurement (e.g., voltage at a busbar in substation A).
Example Scenario#
The following example represents a (very) small power grid consisting of a single exterior grid connection (i.e., a connection to a larger-scale power grid), a single transforming substation transforming between high voltage (110kV) and medium voltage (20kV), along with two medium votlage distribution substations.
They form an open ring topology, as indicated by the circuit breakers / line switches.
For each station, one or multiple RTUs are responsible for transmitting measurements and reacting to control commands, as visualized below.
The elements an RTU is responsible for can be seen when hovering the RTU.
In the visualization, the underlying power grid topology is stored in the power-grid.yml
, while the network.yml
stores the RTU-related information.
The linkage between both domains stems from the data-points.yml
.
Along with the physical power grid topology, the communication network has a related yet different topology itself, which is visualized below. It consists of multiple subnets divided by routers with several switches connecting the Remote Terminal Units to the Control Center.
To start this basic scenario, start Wattson and pass the path to this scenario as an argument:
sudo python3 -m wattson /path/to/wattson/scenarios/minimal-example
As soon as the simulation is ready, you can interact with the components via Python scripts (WattsonClient) or via the command line interface (Wattson CLI).