@wethecurious/curios-reduxmiddleware
TypeScript icon, indicating that this package has built-in type declarations

0.0.8 • Public • Published

CuriOs redux middleware

This collection of middlewares is designed to provide a redux friendly connection to We The Curious's CuriOs services for exhibit's implementing the redux pattern. The middleware handles connection to and data retrival from:

  • mqtt iot devices
  • phidget physical input devices
  • exhibit analytics service

Usage

The createCuriosMiddleware export both a middleware and wrapped version of the redux combineReducer function which provides the '@@Curios' reducer to track connection state in the redux store

Changes

v0.0.8

  • Added options to useCurios hook to optionally attempt to parse bus data as json

v0.0.6

  • Changed phidget actions to correctly handle disconnect and reconnection of devices

  • TODO: make sure the reducer updates to reflect both channel and connection status

Config

{
    app: 'example', //app name as supplied by wtc
    appInstance: 0, //instance of the app, used when more than one app connects to the same broker
    service: 'test', //service name
    serviceInstance: 0 //instance of the service, used in there is more than one instance of the service in the app
    serviceVersion: '0.1', //version of the service
    env: 'production', //initialise the middleware in development or production mode
    mqtt: { // mqtt broker connection details
        host: 'localhost',
        port: 3000,
    },
    phidget: [ //phidget details, mulitple phidgets may be connected by providing and array on connection details
        {
            host: 'localhost',
            port: 5166,
            isMqttMock: false //Optional: If a phidget is not avaliable use mqtt as a mock, in this case it will subscribe to mock/phidget/{name}
            devices: [{
                type: 'ENCODER'
                name: 'encoder1'
                channel: 0
            }] //an array of device connected to the VINT ports of the phidget. Only 'ENCODER' and 'VOLTAGE RATIO ARE currently avliable.
        }
    ]
}

Create the Functions and the Store

   const [useCurios, middleware, combineReducers] = createCuriosMiddleware(config)

   const store = createStore(
        combineReducers({...otherReducers}),
        applyMiddleware(...middleware)
   )

Initalise the middleware

    store.dispatch({type: '@@CURIOS_INIT'})

Reset the session

Once an app has been initialised a new session should be created everytime the application resets to attract mode

    store.dispatch({type: '@@CURIOS_SESSION'})

To get the data from the mqtt or phidget bus

The useCurios hook can be used inside a component to get data coming on the bus.

const busData = useCurios()

You can select a component to only update on new data by using a selector function, eg:

const busData = useCurios(state => state[selectedDevice])

You can optionally pass options

const options = {
    parseAsJson: true
}

const busData = useCurios(state => state[selectedDevice], options)

To mock phidget info with mqtt

If a phidget is not avaliable you can use mqtt as a mock by setting isMqttMock: true in the phidget device config. In this case it will subscribe to mock/phidget/{name}

Coming next

  • [x] Better selection of params from useCurios

  • [x] More control over phidget devices and ports. Currently it is not easy to choose which device is running on which VINT port

  • [x] MQTT mock system for when phidget hardware is not avaliable

  • AWS IoT intergration for analytics

  • Less pollution of redux dispatch list when mqtt can't connect

  • Support for more phidget devices

Dependencies (0)

    Dev Dependencies (0)

      Package Sidebar

      Install

      npm i @wethecurious/curios-reduxmiddleware

      Weekly Downloads

      8

      Version

      0.0.8

      License

      GPL-3.0

      Unpacked Size

      349 kB

      Total Files

      121

      Last publish

      Collaborators

      • nestorreta
      • makorantz
      • benvium