Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
90 commits
Select commit Hold shift + click to select a range
d10b7b9
Specfied new, more user friendly pattern for pairing code and token
wilcowijbrandi Apr 2, 2026
937b4de
Pull S2connect from learn docs
jorritn Apr 29, 2026
45bf51b
Move certificate specification to security section + use S2 Connect a…
jorritn May 4, 2026
bdffbdd
Update discovery-pairing-authentication.md
GerbenBroenink May 5, 2026
fb2f542
Merge pull request #66 from flexiblepower/Update-security-considerations
GerbenBroenink May 5, 2026
4bdfc18
Merge remote-tracking branch 'origin/s2-connect-beta-3' into add-vers…
jorritn May 6, 2026
fea4053
created v1.0-beta2 version
jorritn May 6, 2026
83a741c
Merge branch 'main' of https://github.com/flexiblepower/s2-documentat…
jorritn May 6, 2026
02f2a07
Add Client Redirect for old path of S2 connect specification and vers…
jorritn May 7, 2026
f6578ac
Merge pull request #72 from flexiblepower/add-versioning-to-s2-connect
jorritn May 7, 2026
b3f5002
Described per node rate limit for pairing attempts
wilcowijbrandi May 7, 2026
24c0e1c
Merge pull request #73 from flexiblepower/pairing-rate-limit
jorritn May 7, 2026
0072a0c
Moved API version selection to its own section
wilcowijbrandi May 8, 2026
d95d685
Merge pull request #75 from flexiblepower/rest-version-selection
jorritn May 11, 2026
c932c59
Added specification for the WAN pairing endpoint registry
wilcowijbrandi May 12, 2026
b5a98a5
Specified all LAN-LAN pre-pairing interaction
wilcowijbrandi May 12, 2026
91741f4
Updated the challenge response function to mitigate WAN mitm-attacks
wilcowijbrandi May 12, 2026
82d9b27
Apply suggestions from code review
wilcowijbrandi May 19, 2026
ec78d61
Added clarification that fingerprints contain colons
wilcowijbrandi May 19, 2026
3800c49
Merge pull request #78 from flexiblepower/mitm
wilcowijbrandi May 19, 2026
e7dc904
Apply suggestions from code review
wilcowijbrandi May 19, 2026
1317da0
Removed LAN check from pre-pairing interactions
wilcowijbrandi May 19, 2026
5d22629
Merge pull request #77 from flexiblepower/prepairing
wilcowijbrandi May 19, 2026
e26cc83
Apply suggestions from code review
wilcowijbrandi May 19, 2026
bad648c
Textual improvements regarding the different APIs
wilcowijbrandi May 19, 2026
aad4807
Merge pull request #76 from flexiblepower/registry
wilcowijbrandi May 19, 2026
c2cdce8
Created specifications navbar item
jorritn May 19, 2026
9e34fd6
Removed WAN endpoint advertisement feature from DNS-SD and improved e…
wilcowijbrandi May 19, 2026
a2a0ad0
Rewrote background section, simplified requerements section
wilcowijbrandi May 21, 2026
0ed8002
Added recommendation to exponential back-off, moved it one level up s…
wilcowijbrandi May 21, 2026
51459c1
Specified that a WAN pairing server is only inteded for WAN clients (…
wilcowijbrandi May 21, 2026
03cf6b9
Added DDoS requerements, updated certificate sections
wilcowijbrandi May 21, 2026
5476328
Added versioning information for S2 JSON
wilcowijbrandi May 21, 2026
37de047
Specified websocket ping, removed redundent maximum length of payload
wilcowijbrandi May 21, 2026
e3cea39
Specified that the Handshake and HandshakeResponse messages as define…
wilcowijbrandi May 21, 2026
6a53008
Added clarification on HTTPS and specified HTTP version
wilcowijbrandi May 21, 2026
470b8b6
Specified opening websocket
wilcowijbrandi May 21, 2026
d183b79
Clarified some details in the challenge response function
wilcowijbrandi May 22, 2026
ff646d8
Renamed conncetion initiation to session initiaton
wilcowijbrandi May 22, 2026
f8a4df5
Textual improvements and clarifications
wilcowijbrandi May 26, 2026
241fb26
Moved the check for WAN pairing server for LAN nodes to the correct l…
wilcowijbrandi May 26, 2026
97cd70d
Merge pull request #82 from flexiblepower/stuff
jorritn May 26, 2026
d51493b
Enhance S2-Connect specification details
jorritn May 27, 2026
a572af4
fix two typos
jorritn May 27, 2026
381485b
Add certificate check and remove mentions of local server checks
jorritn May 28, 2026
bfa7e22
Update website/s2-connect/discovery-pairing-authentication.md
jorritn May 28, 2026
d52f51f
Improve several mentions of certificate checks
jorritn May 28, 2026
f633496
Merge branch 'tls-certificate-check-improvements' of https://github.c…
jorritn May 28, 2026
878376a
Improve local server authenticity check description
jorritn May 28, 2026
a4c3552
fix typos
jorritn May 28, 2026
1e552fa
fix typos and grammar and style issues
jorritn May 28, 2026
fda8ff9
Consistent use of capitalization in HTTP server
jorritn May 28, 2026
839aa6d
Update website/s2-connect/discovery-pairing-authentication.md
jorritn May 28, 2026
162c269
Update website/s2-connect/discovery-pairing-authentication.md
wilcowijbrandi Jun 1, 2026
ad4c799
Merge pull request #84 from flexiblepower/typos
wilcowijbrandi Jun 1, 2026
4328349
Removed left-over part about using DNS-SD for advertising WAN endpoints
wilcowijbrandi Jun 1, 2026
6a52339
Merge remote-tracking branch 'origin/s2-connect-beta-3' into dnssd
wilcowijbrandi Jun 1, 2026
98b48c5
Merge pull request #80 from flexiblepower/dnssd
wilcowijbrandi Jun 1, 2026
f5deb75
Update website/s2-connect/discovery-pairing-authentication.md
wilcowijbrandi Jun 1, 2026
14e8b98
Removed redundant pinned check, explaned a bit better what a pinned c…
wilcowijbrandi Jun 1, 2026
e38c772
Merge remote-tracking branch 'origin/s2-connect-beta-3' into tls-cert…
wilcowijbrandi Jun 1, 2026
b93597a
Merge pull request #83 from flexiblepower/tls-certificate-check-impro…
wilcowijbrandi Jun 1, 2026
a8c5e6e
Used HTTPS consistently instead of HTTP
wilcowijbrandi Jun 1, 2026
d1d2411
Add S2 Standard access link
jorritn Jun 3, 2026
e0543d3
Merge pull request #85 from flexiblepower/https
wilcowijbrandi Jun 5, 2026
f9c93ad
Added subnet check to LAN-LAN only REST operations
wilcowijbrandi Jun 5, 2026
ee2be76
Update website/s2-connect/discovery-pairing-authentication.md
wilcowijbrandi Jun 8, 2026
5a1eb25
Merge pull request #87 from flexiblepower/lanlan
wilcowijbrandi Jun 8, 2026
93fb3c3
Introduced the term Pairing URL and specified it more clearly
wilcowijbrandi Jun 8, 2026
e1ccdc1
Update website/s2-connect/discovery-pairing-authentication.md
wilcowijbrandi Jun 9, 2026
83bafae
Pairing via URL is a mandatory option
wilcowijbrandi Jun 9, 2026
21ca704
Merge pull request #88 from flexiblepower/pairingurl
wilcowijbrandi Jun 9, 2026
05b4e07
Review Ewoud
ewoudwerkman Jun 24, 2026
2f6801d
Rephrased HTTP GET request to root URL
wilcowijbrandi Jun 25, 2026
f9b4261
Clarification NO_CONTROL_TYPE
wilcowijbrandi Jun 25, 2026
019a179
Clarified that endpoint URL and pairing code is all the info needed t…
wilcowijbrandi Jul 9, 2026
04f4a17
Improved overview image for pairing
wilcowijbrandi Jul 9, 2026
07173a1
Merge pull request #93 from flexiblepower/review-ewoud
wilcowijbrandi Jul 9, 2026
3ca3c59
Version bump
wilcowijbrandi Jul 9, 2026
19a9ec3
Update discovery-pairing-authentication.md
wilcowijbrandi Jul 9, 2026
61e2300
fix link to paths outside of the s2c docs plugin and move images to s…
jorritn Jul 9, 2026
afa03e2
Move all headings in S2 Connect one level deeper
jorritn Jul 9, 2026
e0599e8
pin version 1.0.0
jorritn Jul 9, 2026
451a79e
Merge branch 'main' into specifications-under-separate-navbaritem
jorritn Jul 9, 2026
09e5bca
Merge branch 's2-connect-beta-3' into specifications-under-separate-n…
jorritn Jul 9, 2026
be1b36d
Fix link to s2 connection on specs page
jorritn Jul 9, 2026
444dab0
Fixed broken link to S2 Connect
jorritn Jul 9, 2026
fe291d0
Fix broken links in S2 connect
jorritn Jul 9, 2026
eba3325
Merge pull request #79 from flexiblepower/specifications-under-separa…
jorritn Jul 9, 2026
605c2aa
Fix broken link in S2 Connect to accessToken details
jorritn Jul 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion structured-documentation/ControlType.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Describes a resource's control type(s).

Control types describe how a resource is flexible. Typically, an RM will implement one control type, while a CEM will implement all five control types.
"""
see_also = [{ name = "Guide to S2 control types", link = "https://docs.s2standard.org/docs/concepts/control-types/" }]
see_also = [{ name = "Guide to S2 control types", link = "https://docs.s2standard.org/docs/learn/concepts/control-types/" }]

[variants.POWER_ENVELOPE_BASED_CONTROL]
variant_name = "POWER_ENVELOPE_BASED_CONTROL"
Expand Down
2 changes: 1 addition & 1 deletion structured-documentation/EnergyManagementRole.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ type_name = "EnergyManagementRole"
description = """
Describes whether a resource is an RM or CEM.
"""
see_also = [{ name = "Guide to the S2 architecture", link = "https://docs.s2standard.org/docs/concepts/architecture/"}]
see_also = [{ name = "Guide to the S2 architecture", link = "https://docs.s2standard.org/docs/learn/concepts/architecture/"}]

[variants.CEM]
variant_name = "CEM"
Expand Down
2 changes: 1 addition & 1 deletion structured-documentation/SelectControlType.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ Activates a Control Type for this session.

This message is sent by the CEM to activate a Control Type for this session. The activated control type must be supported by the Resource Manager (as indicated in `ResourceManagerDetails` received by the CEM).
"""
see_also = [{ name = "Guide to S2 control types", link = "https://docs.s2standard.org/docs/concepts/control-types/" }]
see_also = [{ name = "Guide to S2 control types", link = "https://docs.s2standard.org/docs/learn/concepts/control-types/" }]

[fields.control_type]
field_name = "control_type"
Expand Down
1,217 changes: 0 additions & 1,217 deletions website/docs/communication-layer/discovery-pairing-authentication.md

This file was deleted.

214 changes: 0 additions & 214 deletions website/docs/communication-layer/security-considerations.md

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ On the other hand, there are many types of optimizations an energy management sy

With a common protocol for energy flexibility, any device can work with any energy management system. With a common protocol for energy flexibility, you are free to choose which devices you buy *and* the energy management system that optimizes energy flexibility the way you want.

For more information on why S2 was designed the way it was designed, take a look at [Why the S2 approach?](/docs/background/why-the-s2-approach.md).
For more information on why S2 was designed the way it was designed, take a look at [Why the S2 approach?](//learn/background/why-the-s2-approach.md).

## How does S2 relate to other protocols for energy management?
How S2 relates exactly to another protocol of course depends on the other protocol. But most protocols out there tend to pick a type of device (e.g. EV charger, white goods) or pick an optimization (e.g. tariffs, grid signals). S2 is unique in that it is agnostic to both aspects.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@ sidebar_position: 4

## Introduction

In the [discovery and pairing specification](./discovery-pairing-authentication.md) a description is given of the required communication layer. This layer includes a description of encryption requirements. Because the security levels given by different crypto algorithms change continuously, this page contains the accepted crypto algorithms for the S2 protocol. Keep in mind that this will change over time.
The S2 Connect specification contains a description of encryption requirements. Because the security levels given by different crypto algorithms change continuously, this page contains the accepted crypto algorithms for S2 Connect. Keep in mind that this will change over time.

At the moment, we refer to the Mozilla guidelines in: [Server Side TLS](https://wiki.mozilla.org/Security/Server_Side_TLS). In the future these Mozilla guidelines will change, and S2 might have it's own list of accepted algorithms.

## Accepted algorithms will change

As mentioned in the introduction, due developments in crypto technologies, security levels of known crypto algorithms will change over time. Algorithms that were considered safe 10 years ago, are unsafe at the moment. And algorithms that are considered safe today, might be vulnerable to new attacks in 5 years, or even tomorrow. And as we prepare for the imminent transition to post-quantum cryptography, our perception of the security of algorithms will most likely change.

Therefore, this list will continuously change, and kept up to date. However, to engineer future proof systems, S2-nodes **SHOULD** be able to update their used crypto libraries, and hardware **SHOULD** be over-dimensioned. So, if the used crypto becomes obsolete newer, and possibly heavier, algorithms can be installed on the S2-node. When changes are made to the list of accepted crypto libraries, all S2Nodes **MUST** follow these changes within half a year.
Therefore, this list will continuously change, and kept up to date. However, to engineer future proof systems, S2 nodes **SHOULD** be able to update their used crypto libraries, and hardware **SHOULD** be over-dimensioned. So, if the used crypto becomes obsolete newer, and possibly heavier, algorithms can be installed on the S2 node. When changes are made to the list of accepted crypto libraries, all S2Nodes **MUST** follow these changes within half a year.

## Accepted algorithms

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,6 @@ S2 was designed as a semantic protocol, which can have multiple, mutually compat
* communication between a device endpoint in the cloud and an energy management system in the building
* communication between different modules inside an energy management system

S2 Connect specifies the discovery, pairing, communication and unpairing process between two S2 Connect capable devices.
S2 Connect specifies the discovery, pairing, communication and unpairing process between two S2 Connect capable devices.

Refer to [specification](/s2-connect/1.0.0/discovery-pairing-authentication) to read the S2-Connect specification.
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ The device code flow of OAuth 2.0 ([RFC 8628](https://www.rfc-editor.org/rfc/rfc

The end result is that the client has an access token (and potentially an refresh token) that would be used to authenticate when establishing a WebSocket connection.

![image](../../static/img/communication-layer/oauth2-s2.png)
![image](../../../static/img/communication-layer/oauth2-s2.png)
<details>
<summary>Image generated using the following PlantUML code:</summary>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: "Example: Electric Vehicle"
hide_title: true
---

![image not found](../../static/img/example-ev-header.png)
![image not found](@site/static/img/example-ev-header.png)

This page serves as a guide for implementing a S2 RM for an electric vehicle (charge point), or to give a CEM developer a better understanding of what to expect when controlling the energy flexibility of electric vehicles. It provides some example S2 messages for a (fictional) EV as well.

Expand All @@ -19,7 +19,7 @@ The battery management system in the EV consists of hardware and software that u
In principle, the RM can be implemented either on EV level or on the charge point level. However, the availability of the required data for the RM depends on the interfaces between EV and charge point (so both the EV and the charge point need to support right interfaces). For example, some EVs do not share State-of-Charge (SoC) information with the charge point and, on the other hand, the EV typically doesn't know where it is connected in the grid. Depending on the energy flexibility use case and as long as the RM has the required data, it can be implemented both on EV or on charge point level. However, in a specific situation, there should only be one RM for the charger-EV combination.

## Choosing the right Control Type
S2 is a language for conveying energy flexibility to the CEM without making any assumptions on what the CEM is optimizing for. Although there are multiple [Control Type(s)](/docs/concepts/control-types.md) that can be used for an EV, it is preferred to pick the one that conveys the most information and control options to the CEM, so the CEM can do the best optimization that adds the most value. In the ideal situation, the RM has access to the following data points:
S2 is a language for conveying energy flexibility to the CEM without making any assumptions on what the CEM is optimizing for. Although there are multiple [Control Type(s)](learn/concepts/control-types.md) that can be used for an EV, it is preferred to pick the one that conveys the most information and control options to the CEM, so the CEM can do the best optimization that adds the most value. In the ideal situation, the RM has access to the following data points:
- Minimum charging power (and discharging power, only relevant for V2G)
- Maximum charging power (and discharging power, only relevant for V2G)
- SoC at arrival
Expand Down Expand Up @@ -62,7 +62,7 @@ We cover the situation in which the RM has access to the following data:

Furthermore, the RM can control the charging power of the EV such that it can set the power at any value between the minimum and maximum value.

The following sequence diagram is an example of how a message exchange between the CEM and RM could look like, but messages could also be sent in a different order (see also [State of communication](/docs/communication-layer/discovery-pairing-authentication/#state-of-communication)). `ReceptionStatus` messages are omitted for readability.
The following sequence diagram is an example of how a message exchange between the CEM and RM could look like, but messages could also be sent in a different order (see also [State of communication](/s2-connect/1.0.0/discovery-pairing-authentication/#state-of-communication)). `ReceptionStatus` messages are omitted for readability.

![cem_rm_interactions](https://www.plantuml.com/plantuml/png/VP7DJiCm3CVlUOey0F007D1W0x539TI2E9lKWcYf7MndQ3mzeI0HMCNLF_y_BA_KGAnCoH4RUjwZ-FLrT-Bxxjm_ujF0OOVc0nDXC1oTgzIVNipy5cZK5zYXw-TPHUrmQRD7pKoARYblIz4YfFXUSrhBAk8Y0JiWU4RPe45CsleFc33Ocic4q_qXB_itt4Emk0VxatJJNwtFXeCQJXlK835RP78kCMSVoHFx368nb0JYMKQKLdx7RoWTWXR12ScElI-35J2MmS2A7aTNL4_yfks5CzwIcfGmTsgapVXB-P17C7H8e_zi_gl6WAfriSVNWchk_x-FKNzUlwf-PKeV)
<details>
Expand Down
Loading