<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.17 (Ruby 3.0.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-core-conditional-attributes-05" category="info" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.15.1 -->
  <front>
    <title abbrev="Conditional Attributes for CoRE">Conditional Attributes for Constrained RESTful Environments</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-core-conditional-attributes-05"/>
    <author initials="M." surname="Koster" fullname="Michael Koster">
      <organization>Dogtiger Labs</organization>
      <address>
        <postal>
          <street>524 H Street</street>
          <city>Antioch, CA</city>
          <code>94509</code>
          <country>USA</country>
        </postal>
        <email>michaeljohnkoster@gmail.com</email>
      </address>
    </author>
    <author initials="A." surname="Soloway" fullname="Alan Soloway">
      <organization>Qualcomm Technologies, Inc.</organization>
      <address>
        <postal>
          <street>5775 Morehouse Drive</street>
          <city>San Diego</city>
          <code>92121</code>
          <country>USA</country>
        </postal>
        <email>asoloway@qti.qualcomm.com</email>
      </address>
    </author>
    <author initials="B." surname="Silverajan" fullname="Bilhanan Silverajan" role="editor">
      <organization>Tampere University</organization>
      <address>
        <postal>
          <street>Kalevantie 4</street>
          <city>Tampere</city>
          <code>33100</code>
          <country>Finland</country>
        </postal>
        <email>bilhanan.silverajan@tuni.fi</email>
      </address>
    </author>
    <date year="2022" month="October" day="24"/>
    <area>art</area>
    <workgroup>CoRE Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <keyword>CoRE</keyword>
    <keyword>CoAP</keyword>
    <keyword>Observe</keyword>
    <abstract>
      <t>This specification defines Conditional Notification and Control Attributes that work with CoAP Observe (RFC7641).</t>
    </abstract>
    <note>
      <name>Editor note</name>
      <t>The git repository for the draft is found at https://github.com/core-wg/conditional-attributes/</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>IETF Standards for machine-to-machine communication in constrained environments describe the Constrained Application Protocol (CoAP) <xref target="RFC7252"/>, a RESTful application protocol, as well as a set of related information standards that may be used to represent machine data and machine metadata in REST interfaces.</t>
      <t>This specification defines Conditional Notification and Control Attributes for use with CoAP Observe <xref target="RFC7641"/>.</t>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <t>This specification requires readers to be familiar with all the terms and concepts that are discussed in <xref target="RFC7252"/> and <xref target="RFC7641"/>.  This specification makes use of the following additional terminology:</t>
      <dl>
        <dt>Notification Band:</dt>
        <dd>
          <t>A resource value range that  may be bounded by a minimum and maximum value or may be unbounded having either a minimum or maximum value.</t>
        </dd>
      </dl>
    </section>
    <section anchor="binding_attributes">
      <name>Conditional Attributes</name>
      <t>This specification defines conditional attributes for use with CoRE Observe <xref target="RFC7641"/>. Conditional attributes provide fine-grained control of notification and synchronization of resource states. When observing a resource, a CoAP client conveys conditional attributes as metadata using the query component of a CoAP URI. A conditional attribute can be represented as a "name=value" query parameter or simply a "name" without a value. Multiple conditional attributes in a query component are separated with an ampersand "&amp;". A resource marked as Observable in its link description SHOULD support these conditional attributes.</t>
      <t>Note: In this draft, we assume that there are finite quantization effects in the internal or external updates to the value representing the state of a resource; specifically, that a resource state may be updated at any time with any valid value. We therefore avoid any continuous-time assumptions in the description of the conditional attributes and instead use the phrase "sampled value" to refer to a member of a sequence of values that may be internally observed from the resource state over time.</t>
      <section anchor="conditional-notification-attributes">
        <name>Conditional Notification Attributes</name>
        <t>Conditional Notification Attributes define the conditions that trigger a notification. Conditional Notification Attributes SHOULD be evaluated on all potential notifications from a resource, whether resulting from an internal server-driven sampling process or from external update requests to the server.</t>
        <t>The set of Conditional Notification Attributes defined here allows a client to control how often a notification is received and how much a representation state should change in order to trigger a notification. One or more Conditional Notification Attributes MAY be included in an Observe request.</t>
        <t>Conditional Notification Attributes are defined below:</t>
        <table anchor="notificationattributes">
          <name>Conditional Notification Attributes</name>
          <thead>
            <tr>
              <th align="left">Attribute</th>
              <th align="left">Name</th>
              <th align="left">Value</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Greater Than</td>
              <td align="left">c.gt</td>
              <td align="left">xs:decimal</td>
            </tr>
            <tr>
              <td align="left">Less Than</td>
              <td align="left">c.lt</td>
              <td align="left">xs:decimal</td>
            </tr>
            <tr>
              <td align="left">Change Step</td>
              <td align="left">c.st</td>
              <td align="left">xs:decimal (&gt;0)</td>
            </tr>
            <tr>
              <td align="left">Notification Band</td>
              <td align="left">c.band</td>
              <td align="left">(none)</td>
            </tr>
            <tr>
              <td align="left">Edge</td>
              <td align="left">c.edge</td>
              <td align="left">xs:boolean</td>
            </tr>
          </tbody>
        </table>
        <section anchor="gt">
          <name>Greater Than (c.gt)</name>
          <t>When present, Greater Than indicates the upper limit value the sampled value SHOULD cross before triggering a notification. A notification is sent whenever the sampled value crosses the specified upper limit value, relative to the last reported value, and the time for "c.pmin" has elapsed since the last notification. The sampled value is sent in the notification. If the value continues to rise, no notifications are generated as a result of "c.gt". If the value drops below the upper limit value then a notification is sent, subject again to the "c.pmin" time.</t>
          <t>The Greater Than parameter can only be supported on resources with a scalar numeric value.</t>
        </section>
        <section anchor="lt">
          <name>Less Than (c.lt)</name>
          <t>When present, Less Than indicates the lower limit value the resource value SHOULD cross before triggering a notification. A notification is sent whenever the sampled value crosses the specified lower limit value, relative to the last reported value, and the time for "c.pmin" has elapsed since the last notification. The sampled value is sent in the notification. If the value continues to fall no notifications are generated as a result of "c.lt". If the value rises above the lower limit value then a new notification is sent, subject to the "c.pmin" time.</t>
          <t>The Less Than parameter can only be supported on resources with a scalar numeric value.</t>
        </section>
        <section anchor="st">
          <name>Change Step (c.st)</name>
          <t>When present, Change step indicates how much the value representing a resource state SHOULD change before triggering a notification, compared to the previous resource state. Upon reception of a query including the "c.st" attribute, the current resource state representing the most recently sampled value is reported, and then set as the last reported value (last_rep_v). When a subsequent sampled value or update of the resource state differs from the last reported state by an amount, positive or negative, greater than or equal to st, and the time for "c.pmin" has elapsed since the last notification, a notification is sent and the last reported value is updated to the new resource state sent in the notification. The change step MUST be greater than zero otherwise the receiver MUST return a CoAP error code 4.00 "Bad Request" (or equivalent).</t>
          <t>The Change Step parameter can only be supported on resources with a scalar numeric value.</t>
          <t>Note: due to sampling and other constraints, e.g. "c.pmin", the change in resource states received in two sequential notifications may differ by more than "c.st".</t>
        </section>
        <section anchor="band">
          <name>Notification Band (c.band)</name>
          <t>The Notification Band attribute allows a bounded or unbounded (based on a minimum or maximum) value range that may trigger multiple notifications. This enables use cases where different ranges result in differing behaviour. For example, in monitoring the temperature of machinery, whilst the temperature is in the normal operating range, only periodic updates are needed. However as the temperature moves to more abnormal ranges more frequent state updates may be sent to clients.</t>
          <t>Without a notification band, a transition across a Less Than (c.lt), or Greater Than (c.gt) limit only generates one notification.  This means that it is not possible to describe a case where multiple notifications are sent so long as the limit is exceeded.</t>
          <t>The "c.band" attribute works as a modifier to the behaviour of "c.gt" and "c.lt". Its use is determined only by its presence, and not its value. Therefore, if "c.band" is present in a query, "c.gt", "c.lt" or both, MUST be included.</t>
          <t>When "c.band" is present with "c.lt" but without "c.gt", the lower bound for the notification band (notification band minimum) is defined. Notifications occur when the resource value is equal to or above the notification band minimum. No maximum values exist for the band.</t>
          <t>When "c.band" is present with "c.gt" but without "c.lt", the upper bound for the notification band (notification band maximum) is defined. Notifications occur when the resource value is equal to or below the notification band maximum. No minimum values exist for the band.</t>
          <t>If "c.band" is specified in which the value of "c.gt" is less than that of "c.lt", in-band notification occurs. That is, notification occurs whenever the resource value is between the "c.gt" and "c.lt" values, including equal to "c.gt" or "c.lt".</t>
          <t>If "c.band" is specified in which the value of "c.gt" is greater than that of "c.lt", out-of-band notification occurs. That is, notification occurs when the resource value not between the "c.gt" and "c.lt" values, excluding equal to "c.gt" and "c.lt".</t>
          <t>The Notification Band parameter can only be supported on resources with a scalar numeric value.</t>
        </section>
        <section anchor="edge">
          <name>Edge (c.edge)</name>
          <t>When present, the Edge attribute indicates interest for receiving notifications of either the falling edge or the rising edge transition of a boolean resource state. When the value of the "c.edge" attribute is 0 (False), the server notifies the client each time a resource state changes from True to False. When the value of the "c.edge" attribute is 1 (True), the server notifies the client each time a resource state changes from False to True.</t>
          <t>The "c.edge" attribute can only be supported on resources with a boolean value.</t>
        </section>
      </section>
      <section anchor="conditional-control-attributes">
        <name>Conditional Control Attributes</name>
        <t>Conditional Control Attributes define the time intervals between consecutive notifications as well as the cadence of the evaluation of the conditions that trigger a notification. Conditional Control Attributes can be used to configure the internal server-driven sampling process for performing evaluations of the conditions of a resource. One or more Conditional Control Attributes MAY be included in an Observe request.</t>
        <t>Conditional Control Attributes are defined below:</t>
        <table anchor="controlattributes">
          <name>Conditional Control Attributes</name>
          <thead>
            <tr>
              <th align="left">Attribute</th>
              <th align="left">Name</th>
              <th align="left">Value</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Minimum Period (s)</td>
              <td align="left">c.pmin</td>
              <td align="left">xs:decimal (&gt;0)</td>
            </tr>
            <tr>
              <td align="left">Maximum Period (s)</td>
              <td align="left">c.pmax</td>
              <td align="left">xs:decimal (&gt;0)</td>
            </tr>
            <tr>
              <td align="left">Minimum Evaluation Period (s)</td>
              <td align="left">c.epmin</td>
              <td align="left">xs:decimal (&gt;0)</td>
            </tr>
            <tr>
              <td align="left">Maximum Evaluation Period (s)</td>
              <td align="left">c.epmax</td>
              <td align="left">xs:decimal (&gt;0)</td>
            </tr>
            <tr>
              <td align="left">Confirmable Notification</td>
              <td align="left">c.con</td>
              <td align="left">xs:boolean</td>
            </tr>
          </tbody>
        </table>
        <section anchor="pmin">
          <name>Minimum Period (c.pmin)</name>
          <t>When present, Minimum Period indicates the minimum time, in seconds, between two consecutive notifications (whether or not the resource state has changed). In the absence of this parameter, the minimum period is up to the server. Minimum Period MUST be greater than zero otherwise the receiver MUST return a CoAP error code 4.00 "Bad Request" (or equivalent).</t>
          <t>A server MAY update the resource state with the last sampled value that occurred during the "c.pmin" interval, after the "c.pmin" interval expires.</t>
          <t>Note: due to finite quantization effects, the time between notifications may be greater than "c.pmin" even when the sampled value changes within the "c.pmin" interval. "c.pmin" may or may not be used to drive the internal sampling process.</t>
        </section>
        <section anchor="pmax">
          <name>Maximum Period (c.pmax)</name>
          <t>When present, Maximum Period indicates the maximum time, in seconds, between two consecutive notifications (regardless of whether or not the resource state has changed). In the absence of this parameter, the maximum period is up to the server. Maximum Period MUST be greater than zero and MUST be greater than or equal to Minimum Period (if present), otherwise the receiver MUST return a CoAP error code 4.00 "Bad Request" (or equivalent).</t>
        </section>
        <section anchor="epmin">
          <name>Minimum Evaluation Period (c.epmin)</name>
          <t>When present, Minimum Evaluation Period indicates the minimum time, in seconds, the client recommends to the server to wait between two consecutive evaluations of the conditions of a resource, since the client has no interest in the server doing more frequent evaluations. When the value of Minimum Evaluation Period expires after the previous evaluation, the server MAY immediately perform a new evaluation. In the absence of this parameter, the minimum evaluation period is not defined and thus not used by the server. The server MAY use "c.pmin", if defined, as a guidance on the desired evaluation cadence. Minimum Evaluation Period MUST be greater than zero, otherwise the receiver MUST return a CoAP error code 4.00 "Bad Request" (or equivalent).</t>
        </section>
        <section anchor="epmax">
          <name>Maximum Evaluation Period (c.epmax)</name>
          <t>When present, Maximum Evaluation Period indicates the maximum time, in seconds, the server MAY wait between two consecutive evaluations of the conditions of a resource. When the value of Maximum Evaluation Period expires after the previous evaluation, the server MUST immediately perform a new evaluation. In the absence of this parameter, the maximum evaluation period is not defined and thus not used by the server. Maximum Evaluation Period MUST be greater than zero and MUST be greater than Minimum Evaluation Period (if present), otherwise the receiver MUST return a CoAP error code 4.00 "Bad Request" (or equivalent).</t>
        </section>
        <section anchor="con">
          <name>Confirmable Notification (c.con)</name>
          <t>When present with a value of 1 (True), Confirmable Notification indicates a notification MUST be confirmable, i.e., the server MUST send the notification in a confirmable CoAP message, to request an acknowledgement from the client. When present with a value of 0 (False), Confirmable Notification indicates a notification can be confirmable or non-confirmable, i.e., it can be sent in a confirmable or a non-confirmable CoAP message.</t>
        </section>
      </section>
      <section anchor="server-processing-of-conditional-attributes">
        <name>Server processing of Conditional Attributes</name>
        <t>Conditional Notification Attributes and Conditional Control Attributes may be present in the same query. However, they are not defined at multiple prioritization levels. The server sends a notification whenever any of the parameter conditions are met, upon which it updates its last notification value and time to prepare for the next notification. Only one notification occurs when there are multiple conditions being met at the same time. The reference code below illustrates the logic to determine when a notification is to be sent.</t>
        <figure anchor="figattrint">
          <name>Code logic for conditional notification attribute interactions</name>
          <artwork><![CDATA[
bool notifiable( Resource * r ) {

  #define EDGE EXISTS(r->edge) 
  #define BAND EXISTS(r->band) 
  #define SCALAR_TYPE ( num_type == r->type )
  #define STRING_TYPE ( str_type == r->type )
  #define BOOLEAN_TYPE ( bool_type == r->type )
  #define PMIN_EX ( r->last_sample_time - r->last_rep_time >= r->pmin )
  #define PMAX_EX ( r->last_sample_time - r->last_rep_time > r->pmax )
  #define LT_EX ( r->v < r->lt ^ r->last_rep_v < r->lt )
  #define GT_EX ( r->v > r->gt ^ r->last_rep_v > r->gt )
  #define ST_EX ( abs( r->v - r->last_rep_v ) >= r->st )
  #define IN_BAND ( ( r->gt <= r->v && r->v <= r->lt ) || \
                    ( r->lt <= r->gt && r->gt <= r->v ) || \
                    ( r->v <= r->lt && r->lt <= r->gt ) )
  #define VB_CHANGE ( r->vb != r->last_rep_vb )
  #define VB_EDGE ( r->vb && r->edge || !r->vb && !r->edge )
  #define VS_CHANGE ( r->vs != r->last_rep_vs )

  return (
    PMIN_EX &&
    ( SCALAR_TYPE ?
      ( ( !BAND && ( GT_EX || LT_EX || ST_EX || PMAX_EX ) ) ||
        ( BAND && IN_BAND && ( ST_EX || PMAX_EX) ) )
    : STRING_TYPE ?
      ( VS_CHANGE || PMAX_EX )
    : BOOLEAN_TYPE ?
      ( ( !EDGE && VB_CHANGE ) || 
        ( EDGE && VB_CHANGE && VB_EDGE ) || 
        PMAX_EX )
    : false )
  );
}
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="Implementation">
      <name>Implementation Considerations</name>
      <t>When "c.pmax" and "c.pmin" are equal, the expected behaviour is that notifications will be sent every (c.pmin == c.pmax) seconds. However, these notifications can only be fulfilled by the server on a best effort basis. Because "c.pmin" and "c.pmax" are designed as acceptable tolerance bounds for sending state updates, a query from an interested client containing equal "c.pmin" and "c.pmax" values must not be seen as a hard real-time scheduling contract between the client and the server.</t>
      <t>The use of the notification band minimum and maximum allows for a synchronization whenever a change in the resource value occurs. Theoretically this could occur in-line with the server internal sample period or as defined by the "c.epmin" and "c.epmax" values for determining the resource value. Implementors SHOULD consider the resolution needed before updating the resource, e.g. updating the resource when a temperature sensor value changes by 0.001 degree versus 1 degree.</t>
      <t>When a server has multiple observations with different measurement cadences as defined by the "c.epmin" and "c.epmax" values, the server MAY evaluate all observations when performing the measurement of any one observation.</t>
      <t>This specification defines conditional attributes that can be used with CoAP Observe relationships between CoAP clients and CoAP servers. However, it is recognised that the presence of one or more proxies between a client and a server can interfere with clients receiving resource updates, if a proxy does not supply resource representations when the value remains unchanged (e.g. if "c.pmax" is set, and the server sends multiple updates when the resource state contains the same value). A server SHOULD use the Max-Age option to mitigate this by setting Max-Age to be less than or equal to "c.pmax".</t>
    </section>
    <section anchor="Security">
      <name>Security Considerations</name>
      <t>The security considerations in Section 11 of <xref target="RFC7252"/> apply. Additionally, the security considerations in Section 7 of <xref target="RFC7641"/> also apply.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This specification requests a new Conditional Attributes registry to ensure attributes map uniquely to parameter names.</t>
      <t>Note to IANA: Please replace "RFC XXXX" with the assigned RFC number in the table below.</t>
      <table>
        <thead>
          <tr>
            <th align="left">Attribute</th>
            <th align="left">Parameter</th>
            <th align="left">Value</th>
            <th align="left">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">Minimum Period (s)</td>
            <td align="left">c.pmin</td>
            <td align="left">xs:decimal (&gt;0)</td>
            <td align="left">RFC XXXX</td>
          </tr>
          <tr>
            <td align="left">Maximum Period (s)</td>
            <td align="left">c.pmax</td>
            <td align="left">xs:decimal (&gt;0)</td>
            <td align="left">RFC XXXX</td>
          </tr>
          <tr>
            <td align="left">Minimum Evaluation Period (s)</td>
            <td align="left">c.epmin</td>
            <td align="left">xs:decimal (&gt;0)</td>
            <td align="left">RFC XXXX</td>
          </tr>
          <tr>
            <td align="left">Maximum Evaluation Period (s)</td>
            <td align="left">c.epmax</td>
            <td align="left">xs:decimal (&gt;0)</td>
            <td align="left">RFC XXXX</td>
          </tr>
          <tr>
            <td align="left">Confirmable Notification</td>
            <td align="left">c.con</td>
            <td align="left">xs:boolean</td>
            <td align="left">RFC XXXX</td>
          </tr>
          <tr>
            <td align="left">Greater Than</td>
            <td align="left">c.gt</td>
            <td align="left">xs:decimal</td>
            <td align="left">RFC XXXX</td>
          </tr>
          <tr>
            <td align="left">Less Than</td>
            <td align="left">c.lt</td>
            <td align="left">xs:decimal</td>
            <td align="left">RFC XXXX</td>
          </tr>
          <tr>
            <td align="left">Change Step</td>
            <td align="left">c.st</td>
            <td align="left">xs:decimal (&gt;0)</td>
            <td align="left">RFC XXXX</td>
          </tr>
          <tr>
            <td align="left">Notification Band</td>
            <td align="left">c.band</td>
            <td align="left">(none)</td>
            <td align="left">RFC XXXX</td>
          </tr>
          <tr>
            <td align="left">Edge</td>
            <td align="left">c.edge</td>
            <td align="left">xs:boolean</td>
            <td align="left">RFC XXXX</td>
          </tr>
        </tbody>
      </table>
    </section>
    <section anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>Hannes Tschofenig and Mert Ocak highlighted syntactical corrections in the usage of pmax and pmin in a query. David Navarro proposed allowing for pmax to be equal to pmin. Marco Tiloca provided an extensive review.</t>
    </section>
    <section anchor="contributors">
      <name>Contributors</name>
      <artwork><![CDATA[
Christian Groves
Australia
email: cngroves.std@gmail.com

Zach Shelby
ARM
Vuokatti
FINLAND
phone: +358 40 7796297
email: zach.shelby@arm.com

Matthieu Vial
Schneider-Electric
Grenoble
France
phone: +33 (0)47657 6522
eMail: matthieu.vial@schneider-electric.com

Jintao Zhu
Huawei
Xi’an, Shaanxi Province
China
email: jintao.zhu@huawei.com 
]]></artwork>
    </section>
    <section anchor="changelog">
      <name>Changelog</name>
      <t>draft-ietf-core-conditional-attributes-05</t>
      <ul spacing="normal">
        <li>Multiple (mostly editorial) clarifications and updates based on review comments on mailing list from Marco Tiloca.</li>
      </ul>
      <t>draft-ietf-core-conditional-attributes-04</t>
      <ul spacing="normal">
        <li>Reference code updated to include behaviour for edge attribute.</li>
      </ul>
      <t>draft-ietf-core-conditional-attributes-03</t>
      <ul spacing="normal">
        <li>Attribute names updated to create uniqueness for use as conditional observe attributes.</li>
      </ul>
      <t>draft-ietf-core-conditional-attributes-02</t>
      <ul spacing="normal">
        <li>Clarifications on usage and value of the band parameter</li>
        <li>Implementation considerations for proxies added</li>
        <li>Security considerations added</li>
        <li>IANA considerations added</li>
      </ul>
      <t>draft-ietf-core-conditional-attributes-01</t>
      <ul spacing="normal">
        <li>Clarifications on True and False values for Edge and Con Attributes</li>
        <li>Alan Soloway added as author</li>
      </ul>
      <t>draft-ietf-core-conditional-attributes-00</t>
      <ul spacing="normal">
        <li>Conditional Atttributes section from draft-ietf-core-dynlink-13 separated into own WG draft</li>
      </ul>
    </section>
  </middle>
  <back>
    <references>
      <name>Normative References</name>
      <reference anchor="RFC7252" target="https://www.rfc-editor.org/info/rfc7252">
        <front>
          <title>The Constrained Application Protocol (CoAP)</title>
          <author fullname="Z. Shelby" initials="Z." surname="Shelby">
            <organization/>
          </author>
          <author fullname="K. Hartke" initials="K." surname="Hartke">
            <organization/>
          </author>
          <author fullname="C. Bormann" initials="C." surname="Bormann">
            <organization/>
          </author>
          <date month="June" year="2014"/>
          <abstract>
            <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks.  The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s.  The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
            <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types.  CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7252"/>
        <seriesInfo name="DOI" value="10.17487/RFC7252"/>
      </reference>
      <reference anchor="RFC7641" target="https://www.rfc-editor.org/info/rfc7641">
        <front>
          <title>Observing Resources in the Constrained Application Protocol (CoAP)</title>
          <author fullname="K. Hartke" initials="K." surname="Hartke">
            <organization/>
          </author>
          <date month="September" year="2015"/>
          <abstract>
            <t>The Constrained Application Protocol (CoAP) is a RESTful application protocol for constrained nodes and networks.  The state of a resource on a CoAP server can change over time.  This document specifies a simple protocol extension for CoAP that enables CoAP clients to "observe" resources, i.e., to retrieve a representation of a resource and keep this representation updated by the server over a period of time.  The protocol follows a best-effort approach for sending new representations to clients and provides eventual consistency between the state observed by each client and the actual resource state at the server.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7641"/>
        <seriesInfo name="DOI" value="10.17487/RFC7641"/>
      </reference>
      <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author fullname="S. Bradner" initials="S." surname="Bradner">
            <organization/>
          </author>
          <date month="March" year="1997"/>
          <abstract>
            <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="DOI" value="10.17487/RFC2119"/>
      </reference>
      <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author fullname="B. Leiba" initials="B." surname="Leiba">
            <organization/>
          </author>
          <date month="May" year="2017"/>
          <abstract>
            <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="8174"/>
        <seriesInfo name="DOI" value="10.17487/RFC8174"/>
      </reference>
    </references>
    <section anchor="examples">
      <name>Examples</name>
      <t>This appendix provides some examples of the use of Conditional Attributes.</t>
      <t>Note: For brevity only the method or response code is shown in the header field.</t>
      <section anchor="minimum-period-cpmin-example">
        <name>Minimum Period (c.pmin) example</name>
        <figure anchor="figbindexp1">
          <name>Client registers and receives one notification of the current state and one of a new state state when c.pmin time expires.</name>
          <artwork><![CDATA[
        Observed   CLIENT  SERVER     Actual
    t   State         |      |         State
        ____________  |      |  ____________
    1                 |      |
    2    unknown      |      |     18.5 Cel
    3                 +----->|                  Header: GET
    4                 | GET  |                   Token: 0x4a
    5                 |      |                Uri-Path: temperature
    6                 |      |               Uri-Query: c.pmin="10"
    7                 |      |                 Observe: 0 (register)
    8                 |      |
    9   ____________  |<-----+                  Header: 2.05
   10                 | 2.05 |                   Token: 0x4a
   11    18.5 Cel     |      |                 Observe: 9
   12                 |      |                 Payload: "18.5 Cel"
   13                 |      |  ____________
   14                 |      |
   15                 |      |     23 Cel
   16                 |      |
   17                 |      |
   18                 |      |
   19                 |      |  ____________
   20   ____________  |<-----+                  Header: 2.05
   21                 | 2.05 |     26 Cel        Token: 0x4a
   22    26 Cel       |      |                 Observe: 20
   23                 |      |                 Payload: "26 Cel"
   24                 |      |
   25                 |      |
]]></artwork>
        </figure>
      </section>
      <section anchor="maximum-period-cpmax-example">
        <name>Maximum Period (c.pmax) example</name>
        <figure anchor="figbindexp2">
          <name>Client registers and receives one notification of the current state, one of a new state and one of an unchanged state when c.pmax time expires.</name>
          <artwork><![CDATA[
        Observed   CLIENT  SERVER     Actual
    t   State         |      |         State
        ____________  |      |  ____________
    1                 |      |
    2    unknown      |      |     18.5 Cel
    3                 +----->|                  Header: GET
    4                 | GET  |                   Token: 0x4a
    5                 |      |                Uri-Path: temperature
    6                 |      |               Uri-Query: c.pmax="20"
    7                 |      |                 Observe: 0 (register)
    8                 |      |
    9   ____________  |<-----+                  Header: 2.05
   10                 | 2.05 |                   Token: 0x4a
   11    18.5 Cel     |      |                 Observe: 9
   12                 |      |                 Payload: "18.5 Cel"
   13                 |      |
   14                 |      |
   15                 |      |  ____________
   16   ____________  |<-----+                  Header: 2.05
   17                 | 2.05 |     23 Cel        Token: 0x4a
   18    23 Cel       |      |                 Observe: 16
   19                 |      |                 Payload: "23 Cel"
   20                 |      |
   21                 |      |
   22                 |      |
   23                 |      |
   24                 |      |
   25                 |      |
   26                 |      |
   27                 |      |
   28                 |      |
   29                 |      |
   30                 |      |
   31                 |      |
   32                 |      |
   33                 |      |
   34                 |      |   
   35                 |      |
   36                 |      |  ____________
   37   ____________  |<-----+                  Header: 2.05
   38                 | 2.05 |     23 Cel        Token: 0x4a
   39    23 Cel       |      |                 Observe: 37
   40                 |      |                 Payload: "23 Cel"
   41                 |      |
   42                 |      |
]]></artwork>
        </figure>
      </section>
      <section anchor="greater-than-cgt-example">
        <name>Greater Than (c.gt) example</name>
        <figure anchor="figbindexp3">
          <name>Client registers and receives one notification of the current state and one of a new state when it passes through the greater than threshold of 25.</name>
          <artwork><![CDATA[
     Observed   CLIENT  SERVER     Actual
 t   State         |      |         State
     ____________  |      |  ____________
 1                 |      |
 2    unknown      |      |     18.5 Cel
 3                 +----->|                  Header: GET 
 4                 | GET  |                   Token: 0x4a
 5                 |      |                Uri-Path: temperature
 6                 |      |               Uri-Query: c.gt=25
 7                 |      |                 Observe: 0 (register)
 8                 |      |
 9   ____________  |<-----+                  Header: 2.05 
10                 | 2.05 |                   Token: 0x4a
11    18.5 Cel     |      |                 Observe: 9
12                 |      |                 Payload: "18.5 Cel"
13                 |      |                 
14                 |      |
15                 |      |  ____________
16   ____________  |<-----+                  Header: 2.05 
17                 | 2.05 |     26 Cel        Token: 0x4a
18    26 Cel       |      |                 Observe: 16
29                 |      |                 Payload: "26 Cel"
20                 |      |                 
21                 |      |
]]></artwork>
        </figure>
      </section>
      <section anchor="greater-than-cgt-and-period-max-cpmax-example">
        <name>Greater Than (c.gt) and Period Max (c.pmax) example</name>
        <figure anchor="figbindexp4">
          <name>Client registers and receives one notification of the current state, one when c.pmax time expires and one of a new state when it passes through the greater than threshold of 25.</name>
          <artwork><![CDATA[
     Observed   CLIENT  SERVER     Actual
 t   State         |      |         State
     ____________  |      |  ____________
 1                 |      |
 2    unknown      |      |     18.5 Cel
 3                 +----->|                  Header: GET 
 4                 | GET  |                   Token: 0x4a
 5                 |      |                Uri-Path: temperature
 6                 |      |         Uri-Query: c.pmax=20;c.gt=25
 7                 |      |                 Observe: 0 (register)
 8                 |      |
 9   ____________  |<-----+                  Header: 2.05 
10                 | 2.05 |                   Token: 0x4a
11    18.5 Cel     |      |                 Observe: 9
12                 |      |                 Payload: "18.5 Cel"
13                 |      |                 
14                 |      |
15                 |      |
16                 |      |
17                 |      |
18                 |      |
19                 |      |
20                 |      |
21                 |      |
22                 |      |
23                 |      |
24                 |      |
25                 |      |
26                 |      |
27                 |      |
28                 |      |
29                 |      |  ____________
30   ____________  |<-----+                  Header: 2.05
31                 | 2.05 |     23 Cel        Token: 0x4a
32    23 Cel       |      |                 Observe: 30
33                 |      |                 Payload: "23 Cel"
34                 |      |                 
35                 |      |
36                 |      |  ____________
37   ____________  |<-----+                  Header: 2.05 
38                 | 2.05 |     26 Cel        Token: 0x4a
39    26 Cel       |      |                 Observe: 37
40                 |      |                 Payload: "26 Cel"
41                 |      |                 
42                 |      |
]]></artwork>
        </figure>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
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
2m8AAA==

-->

</rfc>
