<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Experiences with an Internal DSL in the IoT Domain</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Matthias Tichy</string-name>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Jakob Pietron</string-name>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>David Mdinger</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Katharina Juhnke</string-name>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Franz J. Hauck</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Institute of Distributed Systems, Ulm University</institution>
          ,
          <country country="DE">Germany</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Institute of Software Engineering and Programming Languages</institution>
        </aff>
      </contrib-group>
      <fpage>22</fpage>
      <lpage>34</lpage>
      <abstract>
        <p>Modeling the architecture and behavior of embedded systems has long been a success story in the engineering of embedded systems due to the positive e ects on quality and productivity, e.g., by declarative speci cations, by enabling formal analyses, and by the generation of optimized code. These bene ts, however, can only be reaped with extensive investments in specialized languages and tools which typically come with a closed and highly restrictive ecosystem. In this paper, we report our experiences while building an internal domain-speci c language for IoT systems. We present our modeling language realized in TypeScript and integrated into the TypeScript/JavaScript ecosystem. The modeling language supports the declarative speci cation and execution of components, connectors, and state machines. We also provide a simple state space exploration to enable quality assurance techniques like test case generation and model checking. The language is illustrated by a running example with IoT devices. We believe that our solution lies at a sweet spot of providing a declarative modeling experience while reaping bene ts from modern programming languages and their ecosystem to boost productivity.</p>
      </abstract>
      <kwd-group>
        <kwd>IoT</kwd>
        <kwd>Domain Speci c Languages</kwd>
        <kwd>Modeling</kwd>
        <kwd>Experience</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>
        Empirical studies report that model-driven engineering is successfully employed
in the engineering of embedded systems (e.g., [
        <xref ref-type="bibr" rid="ref1 ref17 ref2">2,1,17</xref>
        ]). Reported bene ts are
improved productivity and quality. However, many of those same empirical studies
also report that there are drawbacks like bad usability of tools, di cult tool
integration, di cult integration into standard development tools, e.g., versioning
systems and build systems. Furthermore, our own experience is that the ecosystem
of those tools is small (also reported in [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ]) which leads to problems such as high
Copyright © 2020 for this paper by its authors. Use permitted under Creative Commons
"Attribution 4.0 International" license (CC BY 4.0).
e ort for developing systems connected to other \outside" systems and scarcity
of information in developer networks like StackOver ow.
      </p>
      <p>
        The area of Internet of Things (IoT) is an interesting domain in that regard,
since on the one hand much of the functionality is provided by embedded systems,
but on the other hand an extensive programming language ecosystem exists with
numerous libraries. In SORRIR, an ongoing research project on resilient IoT
systems, we investigated how to use model-driven engineering while exploiting
the bene ts from using TypeScript/JavaScript and its ecosystem. Our project's
focus of realizing resilient IoT systems [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] requires the ability to be highly exible
and e cient w.r.t. where each component of the system is executed in order to
mask and/or recover from failures with minimal downtime. Hence, we decided to
use an interpreted language that runs on a wide variety of di erent hardware {
TypeScript/JavaScript. However, that means that the behavior of very restricted
devices, e.g., Arduinos and ESP8266 ones, is con gured using existing technology
and are integrated via MQTT3 into our framework.
      </p>
      <p>
        The contribution of this paper is threefold: (1) an internal domain-speci c
modeling language built using TypeScript which provides modeling for
architectural con gurations [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ] as well as state machines [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] for behavioral de nition,
which cleverly integrates declarative aspects with code from the TypeScript/
JavaScript ecosystem, (2) a state-space exploration algorithm on these models,
which enables further quality assurance techniques like test case generation [
        <xref ref-type="bibr" rid="ref26">26</xref>
        ]
and model checking [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ], and (3) a report on our experiences while developing the
DSL and corresponding libraries. The internal DSL and the supporting framework
has been published as NPM package4 and a web frontend running an example 5.
      </p>
      <p>We introduce the running example in the following section. Section 3 contains
a description of the modeling language and the realized tool support. This is
followed by a discussion of our experiences in Section 4. After a comparison to
related work in Section 5, we conclude with an outlook on future work.
2</p>
    </sec>
    <sec id="sec-2">
      <title>Running Example</title>
      <p>In the course of this paper, we will illustrate our concepts by a simpli ed
parkinggarage hardware prototype, see Figure 1. Future parking garages will be enabled
to o er smart services to their customers and operators as well such as on-the- y
parking-space reservations or individual guiding.</p>
      <p>These intelligent features require di erent sensor nodes and actors which
communicate with a local application server (edge). To manage more than one
parking garage and to control the parking tra c of a whole city or to bill
customers, a cloud connection is required, too. Furthermore, a parking garage
must be operational in case of faulty sensors, servers, or network connection.</p>
      <p>The application logic is realized inside the SORRIR framework and running
on local server. It consists of four di erent components. Components barrier and</p>
      <sec id="sec-2-1">
        <title>3 https://mqtt.org/ 4 https://www.npmjs.com/package/sorrir-framework 5 https://sorrir.github.io/web-demo</title>
        <p>barrier: Component
parkingManagement: Component
barrierController: Component
signalController: Component</p>
        <p>Connections</p>
        <p>MQTT
internal
parkingManagement { highlighted white { are regular and posses user-de ned
behavior. Component barrier performs the semantic lifting from button events to
car in/out events and ensures that only one car per second can pass the \barrier".
Component parkingManagement, see Figure 2, manages free parking lots. It controls
the red and green LED as well as the display regarding the available parking
lots in the garage. The MQTT components { highlighted blue { are special kind
of I/O components provided by the SORRIR framework and implement the
communication via MQTT.</p>
        <p>On the hardware side there are two ESP8266 microcontrollers (C). The rst
C (left) is used to simulate the barrier of a parking garage. Two buttons are
connected to it to simulate a car entering or leaving the garage. The other C
(right) is used to visualize the status of the parking garage. A small display shows
the remaining free parking spaces. Additionally, a green LED lights up when
there are free parking lots available, otherwise a red LED lights up.</p>
        <p>To connect the C with the application we use MQTT and { in our case {
the Eclipse Mosquitto MQTT broker6. The rmware running on the C is quite
simple: it is responsible to send a corresponding MQTT message when a button
is pressed or switch the LEDs as well as the display when a message is received.
Apart from this, it do not have any further logic. In the course of our testbed,
both Cs run a rmware generated by ESPHome7 through a simple YAML con g
le. The source code of the example is online8.</p>
      </sec>
      <sec id="sec-2-2">
        <title>6 https://mosquitto.org/ 7 https://esphome.io/ 8 https://github.com/sorrir/hardware-testbed</title>
        <p>parkingManagement: Component</p>
        <p>FROM_BARRIER.CAR_IN
FROM_BARRIER.CAR_OUT [freeParkingSapces - 1 &gt; 0]
/ freeParkingSpaces += 1; / freeParkingSpaces -= 1;</p>
        <p>TO_SIGNAL_CONTROLLER.LED_RED(false);   TO_SIGNAL_CONTROLLER.LED_RED(false);</p>
        <p>TO_SIGNAL_CONTROLLER.LED_GREEN(true);   TO_SIGNAL_CONTROLLER.LED_GREEN(true);
TO_SIGNAL_CONTROLLER.DISPLAY(freeParkingSpaces); / freeParkingSpaces = 5   TO_SIGNAL_CONTROLLER.DISPLAY(freeParkingSpaces);
FROM_BARRIER: Port</p>
        <p>FROM_BARRIER.CAR_OUT
/ freeParkingSpaces += 1;
  TO_SIGNAL_CONTROLLER.LED_RED(false);
  TO_SIGNAL_CONTROLLER.LED_GREEN(true);
  TO_SIGNAL_CONTROLLER.DISPLAY(freeParkingSpaces);
FROM_BARRIER.CAR_IN
[freeParkingSapces - 1 == 0]
/ freeParkingSpaces -= 1;
  TO_SIGNAL_CONTROLLER.LED_RED(true);
  TO_SIGNAL_CONTROLLER.LED_GREEN(false);
  TO_SIGNAL_CONTROLLER.DISPLAY(freeParkingSpaces);
AVAILABLE</p>
        <p>FULL</p>
        <p>
          TO_SIGNAL_CONTROLLER: Port
In the following, we present the modeling language developed in the SORRIR
project. The modeling language is inspired by component-based domain-speci c
languages like Matlab/Simulink/State ow, SCADE, and ASCET. Particularly, we
draw on our previous work on the Mechatronic UML [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ], which is a modeling
language for the software of embedded systems. Unlike the aforementioned
languages, Mechatronic UML follows an asynchronous modeling formalism,
which better matches distributed IoT systems.
Our architectural description language covers the most relevant structural
elements of an architectural description language based on [
          <xref ref-type="bibr" rid="ref18">18</xref>
          ], particularly, we
provide components, ports and connections. The description is speci ed using
TypeScript types [
          <xref ref-type="bibr" rid="ref19 ref4">4,19</xref>
          ]. TypeScript types de ne the structure of an object with
respect to both attributes as well as functions. The listing shown in this section
are simpli ed to show only the key aspects.
        </p>
        <p>Listing 1.1 shows the types for the de nition of components. Type AbstractState
de nes the overall state of a component. This type has two attributes covering
the component's state and a queue of events. The interesting part here is the
extensive usage of TypeScript generics. These generics allow us to have generic
code for executing components (and later architectural con gurations and state
machines) while still enjoying type safety guaranteed by the compiler. The generic
parameter E covers the type of events which can be stored in the event queue
and processed by the component, the generic parameter P covers the types of
ports of a component. Finally, the generic parameter S enables the typing of the
internal state of the component. To pass data as payload across components it is
possible to extend the type Event and, for example, add a payload attribute.</p>
        <p>The type Component de nes the structure of a component which is basically
the list of component ports and two functions step and allNextStates. These two
functions contain the behavior of a component. They get as input an AbstractState
and return the new resulting state. It is important that these functions are
side-e ect free, i.e., they do not modify some internal state, to enable state space
exploration and model checking (cf. Section 3.4). Furthermore, this improves
testability of the component behavior. The allNextStates function will return all
potential resulting states if the component has non-deterministic behavior, e.g.,
when two di erent new states are possible depending on which event in the event
queue is processed. Our framework includes an interpreter for the state machines
providing those two functions. However, these functions can also be implemented
manually, which we used for the integration IoT devices reachable via MQTT.</p>
        <p>Listing 1.2 shows the simpli ed type de nitions for the de nition of an
architectural con guration. A Connection connects (multiple) ports of (multiple)
components unidirectionally for asynchronous event exchange.
1 type Connection&lt;E&gt; = {
2 source: {
3 readonly sourceComponent: Component&lt;any, any&gt;,
4 readonly sourcePort: Port&lt;E, any&gt;,
5 }[ ],
6 target: {
7 readonly targetComponent: Component&lt;any, any&gt;,
8 readonly targetPort: Port&lt;E, any&gt;,
9 }[ ]
10 }
11 type Configuration = {
12 readonly components: Component&lt;any, any&gt;[ ],
13 readonly connections: Connection&lt;any&gt;[ ],
14 }</p>
        <p>Listing 1.2. Connection and Con guration de nitions</p>
        <p>The use of the E generic in the de nition of the Connection type ensures
through type checking by the TypeScript compiler that we only connect ports
which share the same E event type. Hence, we do not support a connector where
the source emits a subset of events of the target which in principle would be ne.</p>
        <p>A Con guration is then just a set of components and a set of connections
between them. In this type, we use any as argument for the type parameters to
de ne that for the full con guration any event and port types can be used for
all components and connections, while the aforementioned type de nition for
connections ensures the event-type correctness for each connection individually.</p>
        <p>Our framework executes all components of the con guration by continuously
executing the step function as well as exchanging all events as de ned by the
ports and connections.
3.2</p>
        <sec id="sec-2-2-1">
          <title>Behavior</title>
          <p>The above de nitions of components can be used to develop any kind of component
by creating an object in TypeScript which conforms to the aforementioned
component type and particularly implementing a function which satis es the
type de nition of the step and allNextStates function.</p>
          <p>However, those fully manually implemented components do not reap the
bene ts from modeling the behavior like a higher-level of behavioral speci cation
and enabling quality assurance techniques like test case generation and model
checking. Our aim is to nd a sweet spot for behavioral modeling which combines
declarative parts and parts implemented in TypeScript while still supporting the
aforementioned techniques. Based on previous experience in Mechatronic UML,
we decided to realize a state machines formalism notwithstanding that other
formalisms could be also employed.</p>
          <p>
            Listing 1.3 shows the type de nitions for state machines. The type
StateMachineState is an alias for the AbstractState type which re nes the above introduced
generic parameter S. S is de ned as ffsm:F, my:Mg, i.e., we distinguish two parts
of the state of a state machine component. The rst part (fsm:F) covers discrete
states as used in the typical state machine formalisms|the type of the discrete
states is de ned by the type parameter F. The second part (my:M) covers an
abstract state as known from abstract state machines [
            <xref ref-type="bibr" rid="ref5">5</xref>
            ]. This part is used for
arbitrary (TypeScript) data structures in addition to the discrete state.
7
8 }
9 type RaiseEventCallBack&lt;E, P&gt; = (newEvent:Event&lt;E, P&gt;) =&gt; void;
10 type StateMachine&lt;F, M, E, P&gt; = {
11 readonly transitions: Transition&lt;F, M, E, P&gt;[ ],
12 }
1 type StateMachineState&lt;F, M, E, P&gt; = AbstractState&lt;{ fsm: F, my: M }, E, P&gt;;
2 type Transition&lt;F, M, E, P&gt; = {
3 readonly sourceState: F,
4 readonly event?: [E,P?],
5 readonly condition?: (myState: M, event?:Event&lt;E, P&gt;) =&gt; Boolean,
6 readonly action?: (myState: M, raiseEvent:RaiseEventCallBack&lt;E, P&gt;, event?: Event&lt;E, P&gt;) =&gt;
          </p>
          <p>M,
readonly targetState: F,</p>
          <p>Listing 1.3. Types for State Machines</p>
          <p>The type Transition, typed with the same generics, allows the de nition of a
transition following the usual event/condition/action-paradigm. Each transition
explicitly declares a source and target state as well as whether an event of a
certain type E needs to arrive at a port P. The two functions condition and action
deal with the abstract state part (my:M) of the state-machine state. They enable
the developer to write arbitrary code which checks whether the transition is
enabled (function condition evaluates to true), and if yes, creates a new abstract
state based on the current state via the action function. The action function has in
addition to the current state a parameter for a callback function which enables
the implementation to send an event during the action possible with parameters
based on the abstract state.</p>
          <p>
            We believe this mix of declarative parts and manually written parts could
be a sweet spot. The declarative parts enable execution by a generic
statemachine engine whereas the manually written parts enable to reap the bene ts
of the TypeScript/JavaScript ecosystem. By developing our modeling language
as internal DSL in TypeScript, we can simply use TypeScript as action language
for both of these functions instead of manually developing an action language
like ALF [
            <xref ref-type="bibr" rid="ref24">24</xref>
            ] for executable UML and proper tooling. Particularly, we cannot
compete with the e orts spent by all stakeholders in the TypeScript ecosystems
and, consequently, would not be able to provide good developer experience if
we develop our own action language. We strongly believe that providing good
developer experience is of paramount importance for an acceptance by developers.
The use of generics ensures that the compiler will directly check that source
and target states of transitions are indeed discrete states of that component.
Similarly, the type checking of the compiler ensures that only action and condition
functions are possible with the correct types for the abstract state as well as the
events. Also these checks would have been to be implemented by ourselves if we
would have invented our own action language. Furthermore, the type system of
TypeScript is much more elaborate than the type system in the usual action
languages of MDE approaches.
          </p>
          <p>You can see an implemented transition of ParkingManagement in Listing 1.4.
For event CAR IN on port FROM BARRIER (line 4) it will switch from AVAILBLE
to FULL (lines 2 .) if the number of free parking lots { stored within the internal
state myState { is equal to 0 (line 5). Two events (lines 9 .) are raised to switch
o the green and switch on the red LED. Additionally, an event is sent to update
the number of free parking lots at the display. Finally, the updated internal state
is returned (line 13).
1 {
2 sourceState: ParkingManagementStates.AVAILABLE,
3 targetState: ParkingManagementStates.FULL,
4 event: [EventTypes.CAR_IN, ParkingManagementPorts.FROM_BARRIER],
5 condition: myState =&gt; myState.freeParkingSpaces - 1 == 0,
6 action: (myState, raiseEvent) =&gt; {
7 const newFreeParkingSpaces = myState.freeParkingSpaces-1;
8
9
raiseEvent({type: EventTypes.LED_RED, port: ParkingManagementPorts.TO_SIGNAL_CONTROLLER,
payload: {status: true}});
raiseEvent({type: EventTypes.LED_GREEN, port: ParkingManagementPorts.TO_SIGNAL_CONTROLLER
, payload: {status: false}});
raiseEvent({type: EventTypes.DISPLAY, port: ParkingManagementPorts.TO_SIGNAL_CONTROLLER,
payload: {freeSpaces: newFreeParkingSpaces}});
return {
freeParkingSpaces: newFreeParkingSpaces,
totalParkingSpaces: myState.totalParkingSpaces
}
};</p>
          <p>Listing 1.4. Transition from AVAILABLE to FULL of ParkingManagement
10
11</p>
        </sec>
        <sec id="sec-2-2-2">
          <title>3.3 IoT Ecosystem</title>
          <p>To interact with hardware nodes equipped with sensors and actors we need
a possibility to interact with the world outside of our application. Therefore,
we add I/O components to our approach. These are special kinds of of
I/Oenabled components with a prede ned internal state and behavior o ered by the
underlying SORRIR framework.</p>
          <p>Initially, we decided to implement MQTT I/O components within the SORRIR
framework, because MQTT is a wide-spread, lightweight, IP-based
machine-tomachine protocol for the IoT. Clients connected to a central broker can publish
messages to certain topics and receive message on topics they are subscribed to.</p>
          <p>To communicate with both microcontrollers, we added two I/O components
to our running example: barrierController and signalController, see Figure 1. These
MQTT components encapsulate all network and MQTT-speci c tasks, such as
connecting to the broker or subscribing as well as publishing to MQTT topics.</p>
          <p>Generally, events passed from component to component or even within a
component require at least a Type and, optionally, a Port and further user-de ned
attributes. MQTT, instead, requires for each message a topic and a payload. This
rises the need for a function that decodes MQTT messages to Events and an
encode function vice versa. In our approach, the user has to specify and pass
such functions to the corresponding I/O component.</p>
          <p>For our running example we choose MQTT to demonstrate the applicability
of I/O components. Of course, it is possible to implement further protocols or
techniques, such as communicating with a ZigBee gateway.
3.4</p>
        </sec>
        <sec id="sec-2-2-3">
          <title>Supporting Quality Assurance</title>
          <p>Many quality-assurance approaches used in Model-Driven Engineering use the
state space of the modeled system as a basis for quality analysis. For example,
model checking algorithms generate the state space of the system to check whether
a speci c property, e.g., a CTL formula, is satis ed by the system model. Similarly,
model-based testing approaches use the state space to generate test cases. Finally,
the state space or at last an excerpt is an important tool in manual fault- nding
activities as it enables developers to check how a system reacts to certain event
sequences starting in a certain state.</p>
          <p>Our approach supports such an exploration of the state space due to side-e ect
free functions and explicit state objects independent of the components and state
machines. Furthermore, the components' allNextStates function (cf. Listing 1.1),
either manually implemented or our implemented by our interpreter for state
machines, calculates all next states of a component in case of non-deterministic
behavior. We additionally provide a function, which computes all next states of
an architectural con guration by computing the cross product of all next states of
all components. Based on these functions, our framework allows the computation
of the explicit state space of the system as well as the next N states in the state
space as a bounded state space exploration, with the caveat that physical parts
of our IoT system needs to be replaced by components simulating the behavior.</p>
        </sec>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>Experiences</title>
      <p>Generally, we had positive experiences in developing the framework as well as
examples including the illustrative one of Section 2.</p>
      <p>
        Internal DSL embedded in TypeScript. Generally, our experiences
developing both the interfaces, the execution framework and the web frontend as
well as the illustrative examples are very positive. We do not have quantitative
data to compare our spent e ort with the e ort required for developing a similar
system in traditional meta-modeling environments like EMF. However, our
experience in developing Mechatronic UML and Henshin [
        <xref ref-type="bibr" rid="ref25">25</xref>
        ], an EMF-based
model-transformation system, indicates that a textual DSL for the declarative
parts would require similar e ort using state-of-the-art tools like Xtext whereas
a graphical DSL would require much more e ort. However, developing an action
language similar to the expressiveness of TypeScript would be infeasible. Further,
providing the same quality of tooling as provided by Visual Studio Code would
be similarly infeasible.
      </p>
      <p>Type Checking. TypeScript provides a mature type system. We extensively use
generics for typing of events, ports and component states. Hereby, we o oad type
checking to the TypeScript compiler instead of manually writing a type checker
(and a corresponding advanced type system) for an action language. The type
checking ensures that connections only connect ports with the same set of events,
i.e., the same types. The only downside is that our solution does not support
connections where one port supports just a subset of events of the corresponding
port on the other side of the connection.9 Our experience is furthermore that
the type inference provided by the TypeScript compiler is generally helpful,
with type hints only required very seldomly for type generics when instantiating
components.</p>
      <p>Pure functions. We designed the TypeScript interfaces as side-e ect-free pure
functions. While this required sometimes a bit more e ort to clone and modify the
data instead of modifying the data directly, we feel that this e ort is well spent as
it greatly simpli es the execution framework, enables the state-space exploration
and makes it easier to test the components and the execution framework itself.
Unfortunately, while interfaces in TypeScript support readonly annotations for
attributes, the attributes themselves could be complex object structures with
non-readonly attributes. Hence, the language cannot enforce pure functions and
we are dependent on the developer to only write pure functions.</p>
      <sec id="sec-3-1">
        <title>The TypeScript/JavaScript ecosystem. Particularly, the TypeScript/Java</title>
        <p>Script ecosystem has been a huge bene t to us. For example, our web fronted was
developed in a few hours using React. Furthermore, this also allows in principle
each component to provide its own UI additions to the generic one provided
by us. Similarly, the integration of the IoT microcontrollers in our illustrative
example proved to be very easy. We used an existing rmware which already
supports communication via MQTT. It was very easy to develop speci c bridge
components that integrate any other service available via MQTT by just reusing
9 This would be possible if TypeScript allowed a super de nition in generics as in Java.
existing MQTT libraries and writing a bit of glue code. Furthermore, every user of
our framework can write similar components for interaction with outside services.
Hence, our framework can be easily extended as needed. The only downside
is that this integration of external services does not easily match our design
requirement of pure functions. Thus, for activities like state-space exploration,
users need to replace those components by simulated proxies.
5</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Related Work</title>
      <p>
        In a recent study on approaches to deployment and orchestration of IoT
applications, Nguyen et al. [
        <xref ref-type="bibr" rid="ref21">21</xref>
        ] emphasize that language support plays an important
role. In this respect, the use of Domain-Speci c Languages (DSLs) is now more
popular than General-Purpose Languages (GPLs). This applies to DSLs in both
textual and graphical form. The underlying programming models are mostly
component-based, service-based or ow-based models. Furthermore, the results of
their systematic literature research [
        <xref ref-type="bibr" rid="ref21">21</xref>
        ] show that only very few primary studies
deal with resilience.
      </p>
      <p>
        When it comes to modeling languages for IoT systems, however, there are
various approaches. One of the best known is Node-RED [
        <xref ref-type="bibr" rid="ref22">22</xref>
        ], which enables
browser-based ow editing of nodes within an IoT system using a graphical
DSL. There are several other approaches based on Node-RED, such as
Distributed Node-RED (D-NR) [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] or glue.things [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ]. Node-RED is similar to
DSL-4-IoT [
        <xref ref-type="bibr" rid="ref23">23</xref>
        ], which provides an integrated development environment and a
graphical programming approach that aims to simplify the programming
complexity of IoT and overcome heterogeneity. However, DSL-4-IoT is limited in terms of
scalability and expandability. Another graphical DSL based on the UML is the
Visual Domain-Speci c Modeling Language (VDSML) [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ], which aims to enhance
its usability for people without engineering background. Similar goals are also
targeted by the graphical DSLs Midgar [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] and \If this than that" (IFTTT) [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ].
As Negash et al. [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ] also mention, most of these DSLs are proposed to simplify
the process of creating the work ow. However, to the best of our knowledge there
are no DSLs that are explicitly designed for experienced developers. Furthermore,
compared to our DSL, the modeling languages mentioned are no textual DSLs.
      </p>
      <p>
        Negash et al. [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ] address the limitations regarding scalability and extensibility,
as they exist for DSL-4-IoT, with their textual DSL called Domain-Speci c IoT
Language (DoS-IL). Based on a client-server-client architecture, the system
behavior can be adapted using DoS-IL scripts. Furthermore, Cherrier et al. [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ]
provide another textual DSL called SALT (Simple Application Logic Description
using Transducers) for the con guration of nodes in an IoT application and thus
the description of the application logic. Moreover, Hussein et al. [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ] describe
a model-driven approach to modeling adaptive IoT systems using SysML4IoT,
which is an adaptation of SysML for modeling system functionality with the
Papyrus UML Modeler. Adaptive behavior can be modeled with state machines.
Another textual, external DSL is presented by Harrand et al. [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ] with the
ThingML approach. The approach consists of a DSL and complementing tooling,
particularly, code generation is provided. While the modeling language also has
basic elements like components, connectors and state machines and theoretically
allows arbitrary integrations with the target code, it provides an own restricted
action language. Consequently, the expressiveness is limited to the DSL provided
by the ThingML approach. In comparison, our approach provides an internal DSL
which allows us to fully use TypeScript/JavaScript as action language and easily
integrate with the complete JavaScript ecosystem boosting productivity. However,
this means that, in constrast to ThingML, we are also bound to platforms that
can execute JavaScript and our capabilities for behavioral analysis are restricted.
6
      </p>
    </sec>
    <sec id="sec-5">
      <title>Conclusion and Future Work</title>
      <p>In this paper we described a modeling language for the Internet of Things. The
modeling language provides state-machine{based declarative components, as
well as connections to form complex systems. The language is integrated in the
TypeScript and JavaScript ecosystem and can be accessed via a published npm
package. Further, we provide tooling for state-space exploration and graphical
components for state introspection and monitoring. With this support, our
system lays the foundation for test-case generation, model checking and other
quality-assurance techniques.</p>
      <p>We showed the applicability of our language, technique and tooling through
a real world example. The experiences collected and described further validate
our belief of approaching a sweet spot between declarative modeling as well as
programming features and available ecosystem.</p>
      <p>Our major area of future work is on extending the internal DSL with additional
resilience features. First and foremost, the declarative modeling should allow for
graceful degradation. We plan to enable this on the state-machine level through
failure modes. These trigger annotated state transitions, but are restricted to
quiescent states to preventing undesired side e ects.</p>
      <p>The model is designed to support further resilience mechanisms. Con
gurationtransformation functions, taking a con guration and producing a new one,
supporting state and component replication, need to be added next. Lastly, as the
Internet of Things is inherently distributed, our implementation should naturally
support distributed components. This challenge can mostly be delegated to the
execution environment, as it is responsible to deliver events through channels,
even when they interconnect physical machines.</p>
      <p>Once these additions are included in the language, execution environment
and tooling, our system will provide a solid base for developers to create truly
resilient IoT applications.</p>
      <p>Acknowledgments. The authors acknowledge the nancial support by the
Federal Ministry of Education and Research of Germany (grant nr. 01IS18068,
SORRIR).</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <surname>Agner</surname>
            ,
            <given-names>L.T.W.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Soares</surname>
            ,
            <given-names>I.W.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Stadzisz</surname>
            ,
            <given-names>P.C.</given-names>
          </string-name>
          , Sim~ao,
          <string-name>
            <surname>J.M.:</surname>
          </string-name>
          <article-title>A brazilian survey on UML and model-driven practices for embedded software development</article-title>
          .
          <source>J. Syst. Softw</source>
          .
          <volume>86</volume>
          (
          <issue>4</issue>
          ),
          <volume>997</volume>
          {
          <fpage>1005</fpage>
          (
          <year>2013</year>
          ). https://doi.org/10.1016/j.jss.
          <year>2012</year>
          .
          <volume>11</volume>
          .023
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Baker</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Loh</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Weil</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          :
          <article-title>Model-driven engineering in a large industrial context - motorola case study</article-title>
          . In: Briand,
          <string-name>
            <given-names>L.C.</given-names>
            ,
            <surname>Williams</surname>
          </string-name>
          ,
          <string-name>
            <surname>C.</surname>
          </string-name>
          <source>(eds.) 8th Int. Conf. on ModelDriven Eng. Lang. &amp; Sys.|MoDELS. LNCS</source>
          , vol.
          <volume>3713</volume>
          , pp.
          <volume>476</volume>
          {
          <fpage>491</fpage>
          . Springer (
          <year>2005</year>
          ). https://doi.org/10.1007/11557432 36
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Becker</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Dziwok</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Gerking</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          , Schafer, W.,
          <string-name>
            <surname>Heinzemann</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Thiele</surname>
            , S., Meyer,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Priesterjahn</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Pohlmann</surname>
            ,
            <given-names>U.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Tichy</surname>
            ,
            <given-names>M.:</given-names>
          </string-name>
          <article-title>The MechatronicUML design method|process and language for platform-independent modeling</article-title>
          .
          <source>Tech. Rep. tr-ri-14-337</source>
          , Heinz Nixdorf Inst., Univ. of Paderborn, Germany (Mar
          <year>2014</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>Bierman</surname>
            ,
            <given-names>G.M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Abadi</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Torgersen</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          :
          <article-title>Understanding TypeScript</article-title>
          . In: Jones,
          <string-name>
            <surname>R.E</surname>
          </string-name>
          . (ed.)
          <source>28th Eur. Conf. on Obj.-Orient. Prog.|ECOOP. LNCS</source>
          , vol.
          <volume>8586</volume>
          , pp.
          <volume>257</volume>
          {
          <fpage>281</fpage>
          . Springer (
          <year>2014</year>
          ). https://doi.org/10.1007/978-3-
          <fpage>662</fpage>
          -44202-9 11
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5. Borger, E.,
          <string-name>
            <surname>Raschke</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>Modeling Companion for Software Practitioners</article-title>
          . Springer (
          <year>2018</year>
          ). https://doi.org/10.1007/978-3-
          <fpage>662</fpage>
          -56641-1
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Cherrier</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ghamri-Doudane</surname>
            ,
            <given-names>Y.M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Lohier</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Roussel</surname>
          </string-name>
          , G.:
          <article-title>D-LITe: Distributed Logic for Internet of Things Services</article-title>
          .
          <source>In: Proc. 4th Int. Conf. Cyber Phys. &amp; Soc. Comp.|iThings/CPSCom</source>
          . pp.
          <volume>16</volume>
          {
          <fpage>24</fpage>
          .
          <string-name>
            <surname>IEEE</surname>
          </string-name>
          (
          <year>2011</year>
          ). https://doi.org/10.1109/iThings/CPSCom.
          <year>2011</year>
          .33
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Clarke</surname>
            ,
            <given-names>E.M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Henzinger</surname>
            ,
            <given-names>T.A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Veith</surname>
            ,
            <given-names>H.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Bloem</surname>
            ,
            <given-names>R</given-names>
          </string-name>
          . (eds.): Handbook of Model Checking. Springer (
          <year>2018</year>
          ). https://doi.org/10.1007/978-3-
          <fpage>319</fpage>
          -10575-8
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <surname>Domaschka</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Berger</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Reiser</surname>
            ,
            <given-names>H.P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Eichhammer</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Griesinger</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Pietron</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Tichy</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Hauck</surname>
            ,
            <given-names>F.J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Habiger</surname>
          </string-name>
          , G.:
          <article-title>SORRIR: A resilient self-organizing middleware for iot applications [position paper]</article-title>
          .
          <source>In: Proceedings of the 6th International Workshop on Middleware and Applications for the Internet of Things, M4IoT@Middleware</source>
          <year>2019</year>
          , Davis, CA, USA, December
          <volume>09</volume>
          -
          <issue>13</issue>
          ,
          <year>2019</year>
          . pp.
          <volume>13</volume>
          {
          <fpage>16</fpage>
          .
          <string-name>
            <surname>ACM</surname>
          </string-name>
          (
          <year>2019</year>
          ). https://doi.org/10.1145/3366610.3368098
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <surname>Eterovic</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kaljic</surname>
            ,
            <given-names>E.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Donko</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Salihbegovic</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ribic</surname>
            ,
            <given-names>S.:</given-names>
          </string-name>
          <article-title>An Internet of Things visual domain speci c modeling language based on UML</article-title>
          .
          <source>In: 25th Int. Conf. Inf</source>
          .,
          <string-name>
            <surname>Comm</surname>
          </string-name>
          . &amp;
          <string-name>
            <surname>Autom</surname>
          </string-name>
          . Techn.|ICAT. pp.
          <volume>1</volume>
          {
          <issue>5</issue>
          .
          <string-name>
            <surname>IEEE</surname>
          </string-name>
          (
          <year>2015</year>
          ). https://doi.org/10.1109/ICAT.
          <year>2015</year>
          .7340537
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>Giang</surname>
            ,
            <given-names>N.K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Blackstock</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Lea</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Leung</surname>
            ,
            <given-names>V.C.</given-names>
          </string-name>
          :
          <article-title>Developing IoT Applications in the Fog: A Distributed Data ow Approach</article-title>
          .
          <source>In: 5th Int. Conf. Internet of Things| IOT</source>
          . pp.
          <volume>155</volume>
          {
          <fpage>162</fpage>
          .
          <string-name>
            <surname>IEEE</surname>
          </string-name>
          (
          <year>2015</year>
          ). https://doi.org/10.1109/IOT.
          <year>2015</year>
          .7356560
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11. Gonzalez Garc a,
          <string-name>
            <given-names>C.</given-names>
            ,
            <surname>Pelayo</surname>
          </string-name>
          <string-name>
            <surname>G</surname>
          </string-name>
          -Bustelo,
          <string-name>
            <given-names>B.C.</given-names>
            ,
            <surname>Pascual</surname>
          </string-name>
          <string-name>
            <surname>Espada</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            ,
            <surname>Cueva-Fernandez</surname>
          </string-name>
          ,
          <string-name>
            <surname>G.</surname>
          </string-name>
          :
          <article-title>Midgar: Generation of heterogeneous objects interconnecting applications. A Domain Speci c Language proposal for Internet of Things scenarios</article-title>
          .
          <source>Computer Networks</source>
          <volume>64</volume>
          ,
          <issue>143</issue>
          {
          <fpage>158</fpage>
          (
          <year>2014</year>
          ). https://doi.org/10.1016/j.comnet.
          <year>2014</year>
          .
          <volume>02</volume>
          .010
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>Harrand</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Fleurey</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Morin</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Husa</surname>
            ,
            <given-names>K.E.</given-names>
          </string-name>
          :
          <article-title>Thingml: A language and code generation framework for heterogeneous targets</article-title>
          .
          <source>In: Proceedings of the ACM/IEEE 19th International Conference on Model Driven Engineering Languages and Systems (MoDELS'16)</source>
          . p.
          <fpage>125135</fpage>
          .
          <article-title>Association for Computing Machinery (</article-title>
          <year>2016</year>
          ). https://doi.org/10.1145/2976767.2976812, https://doi.org/10.1145/ 2976767.2976812
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>Hussein</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Li</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Radermacher</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>Model-driven Development of Adaptive IoT Systems</article-title>
          .
          <source>In: 4th Int. Worksh. Interplay of Model-Driv. &amp; Comp</source>
          .-Based
          <string-name>
            <surname>Softw</surname>
          </string-name>
          . Eng.|
          <source>ModComp</source>
          (
          <year>2017</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14. IFTTT Inc.: Ifttt:
          <article-title>If this then that (</article-title>
          <year>2020</year>
          ), https://ifttt.com
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <surname>Karg</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Raschke</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Tichy</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Liebel</surname>
          </string-name>
          , G.:
          <article-title>Model-driven software engineering in the openetcs project: project experiences and lessons learned</article-title>
          . In: Baudry,
          <string-name>
            <given-names>B.</given-names>
            ,
            <surname>Combemale</surname>
          </string-name>
          ,
          <string-name>
            <surname>B.</surname>
          </string-name>
          <source>(eds.) 19th Int. Conf. on Model-Driven Eng. Lang. &amp; Sys.|MoDELS</source>
          . pp.
          <volume>238</volume>
          {
          <fpage>248</fpage>
          .
          <string-name>
            <surname>ACM</surname>
          </string-name>
          (
          <year>2016</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16.
          <string-name>
            <surname>Kleinfeld</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Steglich</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Radziwonowicz</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Doukas</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          <article-title>: glue.things - a Mashup Platform for wiring the Internet of Things with the Internet of Services</article-title>
          .
          <source>In: 5th Int. Worksh. on Web of Things|WoT</source>
          . pp.
          <volume>16</volume>
          {
          <fpage>21</fpage>
          .
          <string-name>
            <surname>ACM</surname>
          </string-name>
          (
          <year>2014</year>
          ). https://doi.org/10.1145/2684432.2684436
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          17.
          <string-name>
            <surname>Liebel</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Marko</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Tichy</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Leitner</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Hansson</surname>
          </string-name>
          , J.:
          <article-title>Model-based engineering in the embedded systems domain: an industrial survey on the state-of-practice</article-title>
          .
          <source>Softw. &amp; Sys. Model</source>
          .
          <volume>17</volume>
          (
          <issue>1</issue>
          ),
          <volume>91</volume>
          {
          <fpage>113</fpage>
          (
          <year>2018</year>
          ). https://doi.org/10.1007/s10270-016-0523-3
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          18.
          <string-name>
            <surname>Medvidovic</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Taylor</surname>
          </string-name>
          , R.N.:
          <article-title>A classi cation and comparison framework for software architecture description languages</article-title>
          .
          <source>IEEE Trans. Softw. Eng</source>
          .
          <volume>26</volume>
          (
          <issue>1</issue>
          ),
          <volume>70</volume>
          {
          <fpage>93</fpage>
          (
          <year>2000</year>
          ). https://doi.org/10.1109/32.825767
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          19.
          <string-name>
            <given-names>Microsoft</given-names>
            <surname>Corp</surname>
          </string-name>
          .:
          <source>TypeScript Language Speci cation v1.8</source>
          (
          <issue>2016</issue>
          ), http:// typescriptlang.org
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          20.
          <string-name>
            <surname>Negash</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Westerlund</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Rahmani</surname>
            ,
            <given-names>A.M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Liljeberg</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Tenhunen</surname>
          </string-name>
          , H.:
          <article-title>DoS-IL: A Domain Speci c Internet of Things Language for Resource Constrained Devices</article-title>
          .
          <source>Procedia Comp. Sci. 109</source>
          ,
          <issue>416</issue>
          {
          <fpage>423</fpage>
          (
          <year>2017</year>
          ). https://doi.org/10.1016/j.procs.
          <year>2017</year>
          .
          <volume>05</volume>
          .411
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          21.
          <string-name>
            <surname>Nguyen</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ferry</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Erdogan</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Song</surname>
            ,
            <given-names>H.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Lavirotte</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Tigli</surname>
            ,
            <given-names>J.Y.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Solberg</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>Advances in Deployment and Orchestration Approaches for IoT - A Systematic Review</article-title>
          .
          <source>In: IEEE Int. Congr. Internet of Things|ICIOT</source>
          . pp.
          <volume>53</volume>
          {
          <fpage>60</fpage>
          .
          <string-name>
            <surname>IEEE</surname>
          </string-name>
          (
          <year>2019</year>
          ). https://doi.org/10.1109/ICIOT.
          <year>2019</year>
          .00021
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          22. OpenJS Foundation:
          <article-title>Node-red { lox-code programming event-driven applications</article-title>
          , http://nodered.org
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          23.
          <string-name>
            <surname>Salihbegovic</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Eterovic</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kaljic</surname>
            ,
            <given-names>E.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ribic</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          :
          <article-title>Design of a domain speci c language and IDE for Internet of things applications</article-title>
          .
          <source>In: 38th Int. Conv. Inf. &amp; Comm. Techn</source>
          .,
          <string-name>
            <surname>Electr</surname>
          </string-name>
          . &amp;
          <string-name>
            <surname>Microelectr</surname>
          </string-name>
          .|MIPRO. pp.
          <volume>996</volume>
          {
          <fpage>1001</fpage>
          .
          <string-name>
            <surname>IEEE</surname>
          </string-name>
          (
          <year>2015</year>
          ). https://doi.org/10.1109/MIPRO.
          <year>2015</year>
          .7160420
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          24.
          <string-name>
            <surname>Seidewitz</surname>
          </string-name>
          , E.:
          <article-title>UML with meaning: executable modeling in foundational UML and the alf action language</article-title>
          . In: Feldman,
          <string-name>
            <given-names>M.</given-names>
            ,
            <surname>Taft</surname>
          </string-name>
          , S.T. (eds.) ACM SIGAda Ann. Conf.
          <source>High Integr. Lang. Techn.|HILT</source>
          . pp.
          <volume>61</volume>
          {
          <fpage>68</fpage>
          .
          <string-name>
            <surname>ACM</surname>
          </string-name>
          (
          <year>2014</year>
          ). https://doi.org/10.1145/2663171.2663187
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          25. Struber,
          <string-name>
            <given-names>D.</given-names>
            ,
            <surname>Born</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            ,
            <surname>Gill</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.D.</given-names>
            ,
            <surname>Groner</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            ,
            <surname>Kehrer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            ,
            <surname>Ohrndorf</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            ,
            <surname>Tichy</surname>
          </string-name>
          ,
          <string-name>
            <surname>M.</surname>
          </string-name>
          :
          <article-title>Henshin: A usability-focused framework for EMF model transformation development</article-title>
          . In: de Lara, J.,
          <string-name>
            <surname>Plump</surname>
            ,
            <given-names>D</given-names>
          </string-name>
          . (eds.) 10th
          <source>Int. Conf. Graph Transf.|ICGT. LNCS</source>
          , vol.
          <volume>10373</volume>
          , pp.
          <volume>196</volume>
          {
          <fpage>208</fpage>
          . Springer (
          <year>2017</year>
          ). https://doi.org/10.1007/978-3-
          <fpage>319</fpage>
          -61470-0 12
        </mixed-citation>
      </ref>
      <ref id="ref26">
        <mixed-citation>
          26.
          <string-name>
            <surname>Tretmans</surname>
            ,
            <given-names>J.:</given-names>
          </string-name>
          <article-title>A formal approach to conformance testing</article-title>
          .
          <source>In: Ra q, O. (ed.) Protocol Test Systems, VI, IFIP TC6/WG6.1 6th Int. Worksh. Protocol Test Sys. IFIP Trans.</source>
          , vol. C-
          <volume>19</volume>
          , pp.
          <volume>257</volume>
          {
          <fpage>276</fpage>
          . North-Holland (
          <year>1993</year>
          )
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>