Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/ethernet'
Browse files Browse the repository at this point in the history
# Conflicts:
#	MySensors.coffee
  • Loading branch information
Wiebe Nieuwenhuis committed Mar 3, 2017
2 parents 2678f84 + aef0815 commit 8e8286c
Show file tree
Hide file tree
Showing 4 changed files with 105 additions and 9 deletions.
33 changes: 30 additions & 3 deletions MySensors-config-schema.coffee
Expand Up @@ -10,15 +10,42 @@ module.exports = {
type: "boolean"
default: true
driver:
description: "The diver to connect to the PiGateway"
description: "The driver to connect to the gateway"
type: "string"
enum: ["serialport"]
enum: ["serialport", "ethernet"]
default: "serialport"
defines:
property: "driverOptions"
options:
serialport:
title: "serialport driver options"
type: "object"
properties:
serialDevice:
description: "The name of the serial device to use"
type: "string"
default: "/dev/ttyUSB0"
baudrate:
description: "The baudrate to use for serial communication"
type: "integer"
default: 115200
ethernet:
title: "ethernet driver options"
type: "object"
properties:
host:
description: "The IP address of the gateway"
type: "string"
default: "192.168.1.100"
port:
description: "The port of the gateway"
type: "integer"
default: 5003
driverOptions:
description: "Options for the driver"
type: "object"
default: {
"serialDevice": '/dev/ttyUSB0', #"/dev/ttyUSB0",
"serialDevice": "/dev/ttyUSB0",
"baudrate": 115200
}
protocols:
Expand Down
20 changes: 14 additions & 6 deletions MySensors.coffee
Expand Up @@ -161,23 +161,31 @@ module.exports = (env) ->
constructor: (framework,config) ->
@config = config
@framework = framework
assert @config.time in ["utc", "local"]
assert @config.driver in ["serialport", "gpio"]

assert @config.time in ["utc", "local"]
assert @config.driver in ["serialport", "ethernet"]

@timeOffset = 0
if @config.time is "local"
@timeOffset = ((new Date()).getTimezoneOffset() * 60 )
env.logger.debug "<- TimeOffset ", @timeOffset

# setup a new driver
switch @config.driver
when "serialport"
SerialPortDriver = require('./serialport')(env)
@driver = new SerialPortDriver(@config.driverOptions)
when "ethernet"
EthernetDriver = require './ethernet'
@driver = new EthernetDriver(@config.driverOptions)

@driver.on('error', (error) => @emit('error', error) )
@driver.on('reconnect', (error) => @emit('reconnect', error) )
@driver.on('error', (error) =>
env.logger.error error
)
@driver.on('reconnect', (error) =>
@emit('reconnect', error)
)
@driver.on('close', =>

@emit('close')
)
@driver.on("data", (data) =>
Expand All @@ -189,7 +197,7 @@ module.exports = (env) ->
)


connect: (timeout = 20000, retries = 3) ->
connect: (timeout = 2500, retries = 3) ->

return @pendingConnect = @driver.connect(timeout, retries)

Expand Down
60 changes: 60 additions & 0 deletions ethernet.coffee
@@ -0,0 +1,60 @@
events = require 'events'
net = require 'net'
Promise = require 'bluebird'

class EthernetDriver extends events.EventEmitter

constructor: (protocolOptions)->
@port = protocolOptions.port
@host = protocolOptions.host

connect: (timeout, retries) ->

# Create connection
@connection = net.createConnection @port, @host

# cleanup
@ready = no

# reject promise on close
@connection.on 'close', () =>
@emit('close')

# setup data listener
@connection.on 'data', (data) =>
# Sanitize data
data = data.toString()
line = data.replace(/(\r\n|\n|\r)/gm,"")
@emit('line', line)

# reject promise on error
@connection.on 'error', (error) =>
@emit('error', error)

#resolve promise on connect
@connection.on 'connect', () =>
@ready = yes
@emit 'ready'
return

return new Promise( (resolve, reject) =>
@once("ready", resolve)
@once("error", reject)
)

disconnect: ->
@connection.end()
return Promise.resolve()

write: (data) ->
if not @connection.write(data, 'utf-8', () =>
@emit "done"
)
@emit "error"

return new Promise( (resolve, reject) =>
@once("done", resolve)
@once("error", reject)
)

module.exports = EthernetDriver
1 change: 1 addition & 0 deletions package.json
Expand Up @@ -9,6 +9,7 @@
"files": [
"MySensors.coffee",
"serialport.coffee",
"ethernet.coffee",
"README.md",
"device-config-schema.coffee",
"MySensors-config-schema.coffee",
Expand Down

0 comments on commit 8e8286c

Please sign in to comment.