<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Darren Ingram</title>
    <description>The latest articles on DEV Community by Darren Ingram (@darren_ingram).</description>
    <link>https://dev.to/darren_ingram</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F510677%2F4731bebb-eb2a-4574-9ab6-7b959788ff13.jpeg</url>
      <title>DEV Community: Darren Ingram</title>
      <link>https://dev.to/darren_ingram</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/darren_ingram"/>
    <language>en</language>
    <item>
      <title>MuleSoft IoT - Make Max Dance!</title>
      <dc:creator>Darren Ingram</dc:creator>
      <pubDate>Thu, 26 Nov 2020 00:46:57 +0000</pubDate>
      <link>https://dev.to/darren_ingram/mulesoft-iot-make-max-dance-i4j</link>
      <guid>https://dev.to/darren_ingram/mulesoft-iot-make-max-dance-i4j</guid>
      <description>&lt;h1&gt;
  
  
  IoT and MuleSoft
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fq84ija5pm4m4zaq49wzy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fq84ija5pm4m4zaq49wzy.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;I have just started learning how to use MuleSoft at work, where we will be using it for integration between our various systems.  I completed the &lt;a href="https://training.mulesoft.com/course/development-fundamentals-mule4" rel="noopener noreferrer"&gt;Anypoint Platform Development: Fundamentals (Mule 4)&lt;/a&gt; self-paced training and then started on this project to help get some hands-on-experience.&lt;br&gt;
So, &lt;strong&gt;&lt;em&gt;disclaimer&lt;/em&gt;&lt;/strong&gt;: I don't really know what I'm doing, so don't rely on this for anything :)&lt;/p&gt;
&lt;h3&gt;
  
  
  Muley (Max) the Mule
&lt;/h3&gt;

&lt;p&gt;After attending a MuleSoft user group event, the organizer sent me a little Max the Mule squishy.  My colleagues and I renamed him to Muley, and during our project planning, whenever we noted a potential use for MuleSoft Anypoint, I'd make Muley do a little dance.  I found myself doing this a lot, and wondered "could I automate this?"&lt;/p&gt;
&lt;h3&gt;
  
  
  Project Goal
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Create a IoT device that controls a motor attached to Muley to make him "dance"&lt;/li&gt;
&lt;li&gt;Control the IoT device from a Web API&lt;/li&gt;
&lt;li&gt;Have some sort of trigger to make Muley dance&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Implementation Overview
&lt;/h2&gt;
&lt;h3&gt;
  
  
  IoT
&lt;/h3&gt;

&lt;p&gt;A few years ago I started tinkering with Arduino and other hobby electronics boards.  I haven't touched any of that for a couple of years, but I went out to the garage and found my old box of goodies.  In there was an unopened &lt;a href="https://store.particle.io/products/photon" rel="noopener noreferrer"&gt;Particle Photon WiFi Development Board&lt;/a&gt;.  This allows you to build a little device and then expose functions over HTTP.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;I connected a servo motor to the Photon board and attached it to the bottom of Muley (using some very professional sticks and tape from my 8-year-old's art supplies!)&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fx1xsxxmot478pn70k57v.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fx1xsxxmot478pn70k57v.jpg" alt="Muley attached to servo"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I also found a LED light ring in my box of tricks, so connected that, just because I could.  I later made up a reason to use it...&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F4cada4ogiom6uvtn50oy.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F4cada4ogiom6uvtn50oy.jpg" alt="Muley and lights connected to Photon"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I wrote the code to make the servo move around and to flash the lights.  These were exposed as functions on the Photon.  I used the Particle Web IDE to do this (as described in the getting started information for the Photon).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The full code is available on GitHub: &lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/DarrenIngram" rel="noopener noreferrer"&gt;
        DarrenIngram
      &lt;/a&gt; / &lt;a href="https://github.com/DarrenIngram/mulesofthackathon-iot" rel="noopener noreferrer"&gt;
        mulesofthackathon-iot
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;
 but here are the important parts that register the &lt;em&gt;dance&lt;/em&gt; and &lt;em&gt;setMood&lt;/em&gt; functions as cloud functions:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    bool setMoodSuccess = Particle.function("setMood", setMood); 
    bool danceSuccess = Particle.function("dance", dance);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fsmz6ysr5hproa555xp6t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fsmz6ysr5hproa555xp6t.png" alt="Particle cloud functions"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Particle Cloud Functions API
&lt;/h3&gt;

&lt;p&gt;Using the &lt;a href="https://docs.particle.io/reference/device-cloud/api/#call-a-function" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;, I was able to figure out how to call the Particle API to trigger my functions using Postman.  The screenshot below shows how I just had to POST to the function name and include my device's unique ID and an access token (both from my Particle account):&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fovz4ujvaduaz8nju48b0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fovz4ujvaduaz8nju48b0.png" alt="Postman Particle API calls"&gt;&lt;/a&gt;&lt;br&gt;
That call resulted in Muley doing a little dance (and was a very exciting moment for me :))&lt;/p&gt;
&lt;h3&gt;
  
  
  MuleSoft Anypoint
&lt;/h3&gt;

&lt;p&gt;My next step was to use Anypoint to design and implement a System API to make calls to my cloud functions.&lt;/p&gt;
&lt;h4&gt;
  
  
  System API Design
&lt;/h4&gt;

&lt;p&gt;I used the Anypoint Platform API Designer to build up my RAML API specification.&lt;/p&gt;

&lt;p&gt;While designing the System API, I quickly noticed that both of the cloud functions had the same request and response types, so I created API Fragments for these to allow me to reuse them.  I also had a ton of fun working on this project, so I am very likely to want to use these data types again in future tinkerings!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ffsfs8gi301lvxb5p7t4k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ffsfs8gi301lvxb5p7t4k.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The screenshot below shows how I was able to reference the reusable API Fragments that I published to my own Exchange:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fuxu9vgxjl6z1hdn88zv4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fuxu9vgxjl6z1hdn88zv4.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  Muley IoT System API
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#%RAML 1.0
baseUri: https://anypoint.mulesoft.com/mocking/api/v1/links/3bd0afd8-1b41-43b1-a034-2842d75a2211/ # 
title: iot-muley-sapi
description: System API to call Particle Photon IoT Muley project

protocols:
  - HTTP
  - HTTPS
/mood:
  post:
    description: Set the lighting based on mood
    body:
      application/json:
        type: !include ../exchange_modules/f355980a-ec00-4935-8944-f5f13d8b08ba/particle-iot-function-request/1.0.2/particle-iot-function-request-data-type.raml
        example: !include examples/iot-muley-function-request-example.json

    responses:
      200:
        body:
          application/json:
            type: !include ../exchange_modules/f355980a-ec00-4935-8944-f5f13d8b08ba/particle-iot-function-response-data-type/1.0.2/particle-iot-function-response-data-type.raml
            example: !include examples/iot-muley-function-response-example.json

/dance:
  post:
    description: Make Muley dance
    body:
      application/json:
        type: !include ../exchange_modules/f355980a-ec00-4935-8944-f5f13d8b08ba/particle-iot-function-request/1.0.2/particle-iot-function-request-data-type.raml
        example: !include examples/iot-muley-function-request-example.json
    responses:
      200:
        body:
          application/json:
            type: !include ../exchange_modules/f355980a-ec00-4935-8944-f5f13d8b08ba/particle-iot-function-response-data-type/1.0.2/particle-iot-function-response-data-type.raml
            example: !include examples/iot-muley-function-response-example.json


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  Particle IoT Function Request
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#%RAML 1.0 DataType
displayName: Particle IoT Function Request
description: Representation of the information required when making calls to particle.io functions
properties:
  accessToken:
    type: string
    required: true
    displayName: Access Token
    example: 123456ABC

  arg:
    type: string
    required: false
    displayName: Argument
    example: "extra data"
example: !include particle-iot-function-request-example.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  Particle IoT Function Response
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#%RAML 1.0 DataType
displayName: Particle IoT Function Response
description: Representation of the information returned from a particle.io function call
properties:
  id:
    type: string
    displayName: Id
    example: "30002e000347353137323334"

  connected:
    type: boolean
    displayName: Connected
    example: true

  return-value:
    type: integer
    displayName: "Return value"
    example: 12
example: !include particle-iot-reponse-example.json

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  System API Implementation
&lt;/h4&gt;

&lt;p&gt;In Anypoint Studio I pulled in my System API RAML from Exchange.  It kindly scaffolded it all out for me and I went to work implementing my flows to make HTTP POST requests over to the Particle REST API.&lt;br&gt;
I included a config.yaml file and used the Configuration Properties to connect to this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fbli9hqdsbdeq12n6cym6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fbli9hqdsbdeq12n6cym6.png" alt="config.yaml Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This allowed me to access these configuration properties within my implementation flows:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fbf2c5tsvhi4o6lf6mj5h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fbf2c5tsvhi4o6lf6mj5h.png" alt="System API Implementation Flow"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Since I created the particle API request and response types, I didn't need to do any additional DataWeave mapping before making the http request.&lt;/p&gt;
&lt;h4&gt;
  
  
  Integration Process Flow Implementation
&lt;/h4&gt;

&lt;p&gt;So now I had a Muley IoT System API to handle communications to my IoT device.&lt;br&gt;
Next I needed to create a Flow that handled some trigger and made calls the System API.&lt;br&gt;
I decided to use an email as the trigger.  This would allow me to send emails to &lt;a href="mailto:muley.max.mule@gmail.com"&gt;muley.max.mule@gmail.com&lt;/a&gt; and have Muley dance.&lt;/p&gt;

&lt;p&gt;I was able to pull in the Muley IoT System API from Exchange and get the generated connectors (which was pretty cool!)&lt;/p&gt;

&lt;p&gt;Because I wanted to use this experience to learn, I decided to add another integration in at this point.  I wanted to make Muley react to the content of the email.  For this I found the &lt;a href="https://monkeylearn.com/api/v3/#classify" rel="noopener noreferrer"&gt;Monkey Learn Sentiment Analysis API&lt;/a&gt;.  I setup a developer account which gave me an authorization token and a model Id.  I used these in an HTTP Request connector to pass through the body of the email message and get back a sentiment (of "Positive", "Negative", "Neutral" - along with a bunch of other stuff like the certainty rating).&lt;/p&gt;

&lt;p&gt;So my flow needed to do something like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Trigger on a new email to &lt;a href="mailto:muley.max.mule@gmail.com"&gt;muley.max.mule@gmail.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Pass the content of the email to the Sentiment Analysis API&lt;/li&gt;
&lt;li&gt;Map the result into the request required for the Muley IoT System API Set Mood call&lt;/li&gt;
&lt;li&gt;Call the Muley IoT System API Set Mood method&lt;/li&gt;
&lt;li&gt;Call the Muley IoT System API Dance method&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here is how the flow looks:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fixemvf0yevn0p9xqwjtf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fixemvf0yevn0p9xqwjtf.png" alt="Muley flow"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you can see, I went a bit extra and made use of the JMS Queue connector.  When a new email arrives, I simply published to a JMS queue.  I then made the rest of my integration flow trigger on a new message to the queue.  I really did this just to practice using JMS queues, but it also sets me up to make "other things" happen when Muley gets an email, without having to keep updating this flow.&lt;/p&gt;

&lt;p&gt;Here is how I mapped from the email message payload into the request expected by the sentiment analysis API:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fn5qswgoyghpqgtqcuned.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fn5qswgoyghpqgtqcuned.png" alt="Dataweave mapping to api call "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And another example of Dataweave, this time mapping from the sentiment analysis response into request format for our System API:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;%dw 2.0
output application/json

---
{
    "mood": lower(payload[0].classifications[0].tag_name)
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  The Result
&lt;/h2&gt;

&lt;p&gt;Here is the end result of this Hackathon project.  If we send a positive email to Muley, then the lights flash green while he dances:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F9e6aijrmkza39d0tgnmu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F9e6aijrmkza39d0tgnmu.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/rRU89ivufG8"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;But if we send a negative email then the lights flash red:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fkdmmfsv4vavdo7xarr9y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fkdmmfsv4vavdo7xarr9y.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/rteLmErLXEg"&gt;
&lt;/iframe&gt;
&lt;/p&gt;
&lt;h2&gt;
  
  
  Source Code
&lt;/h2&gt;

&lt;p&gt;The IoT Particle source code and Anypoint .jar files are available on GitHub: &lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/DarrenIngram" rel="noopener noreferrer"&gt;
        DarrenIngram
      &lt;/a&gt; / &lt;a href="https://github.com/DarrenIngram/mulesofthackathon-iot" rel="noopener noreferrer"&gt;
        mulesofthackathon-iot
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;



</description>
      <category>mulesofthackathon</category>
      <category>mulesoft</category>
      <category>iot</category>
      <category>particle</category>
    </item>
  </channel>
</rss>
