Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Running Phidget Handler in Simulated Mode

Code Block
languagexml
titlePhidget Handler Thing Facet in Simulated mode
linenumberstrue
<ThingFacet Name="PhidgetSimulatedFacet">
  <Integer Name="SimulatedValue" Update="auto" KnownBy="PhidgetSimAction"/>
  <String Name="DeviceType"/>
  <String Name="SerialNumber"/>
  <Action Name="PhidgetSimAction" Documentation="Returns integer values from 1 - 100 in Random order">
    <Workflow Limit="1" Live="1" Timeout="-1">
      <Task Name="Main" While="True">
        <Event Name="Argument" As="ActionArgument"/>
        <Invoke Name="ReadValue" waitFor="Argument" Get="phid://" SerialNumber="[%:Event.Argument.SerialNumber.Value:%]" DeviceType="[%:Event.Argument.DeviceType.Value:%]" Simulated="true"/>
        <Output Name="Result" As="ActionResult">
          <Value>
            <SimulatedValue>[%:[%:@Output:%]Invoke.ReadValue.Message.Value:%]</SimulatedValue>
          </Value>
        </Output>
      </Task>
    </Workflow>
  </Action>
</ThingFacet>

Reading Data from Sensors Connected to Phidget Interface Kit

There are few important points to be noted here:

  • Note that PhidgetInterfaceKit is usually a multi port device (2/2/2 or 8/8/8) i.e it has 8 USB, and 8 GPI and 8 8 GPO pins.
  • When there are multiple sensors attached to the InterfaceKit, there will be multiple instances created in ThingModel to which PhidgetSensorFacet is attached.
  • Even though there is one single USB connection, the Protocol handler supports multiplexing of data to different Channel.
  • Therefore when we do a Invoke with Get="phid://[%:Event.Argument.SerialNumber.Value:%]" we attach the serial number to make the invocation unique.
  • Internally there will be multiple listeners attached to the USB serial port each receiving data and saving to SensorValue.

Simulated mode
Code Block
languagexml
titlePhidget Handler Thing Facet to Read Sensors
linenumberstrue
<ThingFacet Name="PhidgetSensorFacet">
  <Integer Name="SensorValue" Update="auto" KnownBy="PhidgetSensorAction"/>
  <String Name="DeviceType"/>
  <String Name="SerialNumber"/>
  <String Name="SensorName"/>
  <Action Name="PhidgetSensorAction" Documentation="Returns integer values from 1 - 100 in
 Random order">
    <Workflow Limit="1" Live="1" Timeout="-1">
      <Task Name="Main" While="True">
        <Event Name="Argument" As="ActionArgument"/>
        <Invoke Name="ReadValue" waitFor="Argument" Get="phid://[%:Event.Argument.SerialNumber.Value:%]" SerialNumber="[%:Event.Argument.SerialNumber.Value:%]" DeviceType="[%:Event.Argument.DeviceType.Value:%]" Simulated="false"/>
        <Output Name="Result" As="ActionResult">
          <Value>
            <SensorValue>[%:[%:@Output:%]Invoke.ReadValue.Message.Value:%]</SensorValue>
          </Value>
        </Output>
      </Task>
    </Workflow>
  </Action>
</ThingFacet>
<!-- Combine with Model -->
<ThingModel Name="PhidgetSensors" Combines="PhidgetSensorFacet">
   <Sid Name="SensorID"/>
</ThingModel>
<!-- Activate Sensor -->
<Query>
  <Save format="version,current">
    <PhidgetSensors>
      <SensorName>Rotation</SensorName>
      <DeviceType>PhidgetInterfaceKit</DeviceType>
      <SerialNumber>0</SerialNumber>
      <SensorValue value="$Null()"/>
    </PhidgetSensors>
  </Save>
</Query>

 

Reading Data from a GPS Sensor

Code Block
languagexml
titlePhidget Handler Thing Facet to Read GPS Sensor
linenumberstrue
<ThingFacet Name="PhidgetSimulatedFacet">
  <Integer Name="SimulatedValue" Update="auto" KnownBy="PhidgetSimAction"/>
  <String Name="DeviceType"/>
  <String Name="SerialNumber"/>
  <Action Name="PhidgetSimAction" Documentation="Returns integer values from 1 - 100 in Random order">
    <Workflow Limit="1" Live="1" Timeout="-1">
      <Task Name="Main" While="True">
        <Event Name="Argument" As="ActionArgument"/>
        <Invoke Name="ReadValue" waitFor="Argument" Get="phid://" SerialNumber="[%:Event.Argument.SerialNumber.Value:%]" DeviceType="[%:Event.Argument.DeviceType.Value:%]" Simulated="true"/>
        <Output Name="Result" As="ActionResult">
          <Value>
            <SimulatedValue>[%:[%:@Output:%]Invoke.ReadValue.Message.Value:%]</SimulatedValue>
          </Value>
        </Output>
      </Task>
    </Workflow>
  </Action>
</ThingFacet>

Controlling Servo Motor Angle

Code Block
languagexml
titlePhidget Handler Thing Facet to control Servo Motor
linenumberstrue
<ThingFacet Name="PhidgetSimulatedFacet">
  <Integer Name="SimulatedValue" Update="auto" KnownBy="PhidgetSimAction"/>
  <String Name="DeviceType"/>
  <String Name="SerialNumber"/>
  <Action Name="PhidgetSimAction" Documentation="Returns integer values from 1 - 100 in Random order">
    <Workflow Limit="1" Live="1" Timeout="-1">
      <Task Name="Main" While="True">
        <Event Name="Argument" As="ActionArgument"/>
        <Invoke Name="ReadValue" waitFor="Argument" Get="phid://" SerialNumber="[%:Event.Argument.SerialNumber.Value:%]" DeviceType="[%:Event.Argument.DeviceType.Value:%]" Simulated="true"/>
        <Output Name="Result" As="ActionResult">
          <Value>
            <SimulatedValue>[%:[%:@Output:%]Invoke.ReadValue.Message.Value:%]</SimulatedValue>
          </Value>
        </Output>
      </Task>
    </Workflow>
  </Action>
</ThingFacet>

...