BinkyNet

package module
v1.3.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 4, 2023 License: Apache-2.0 Imports: 0 Imported by: 0

README

BinkyNet

BinkyNet is a specification for a network architecture used to control model trains.

The goals of this network architecture are:

  • Knowledge of network layout & users is centralized.
  • Highly reliable
  • Faster than existing train networks such a LocoNet
  • Easy to diagnose

Introduction

BinkyNet consists of 3 major types of entities:

  • The network master. This is a centralized unit that has all the knowledge of the layout & users of the network. Practically speaking this is one (or more) computers that control the operations of everything on the track (trains, switches, lighting...).
  • The local worker. This is a unit that is positioned on a specific part of the track (typically 1 per module) and has the "brains" to control local slaves. This unit receives high level instructions from a network master and translates that to low level instructions for local slaves.
  • The local slave. This is a unit with very little intelligence and it typically only capable of performing a single function. An example of a local slave is an I/O unit that drivers a number of lights or receives bit values from objects on the track.

These 3 entities are organized as a tree, with one or more network masters as root.

Network technologies & protocols

BinkyNet uses existing & well proven network technologies whereever possible.

Network master - local worker

The network master(s) and local workers are connected using a standard (100Mb+) wired ethernet, configured such that the network master and local workers under its control all share the same subnet.

The network master(s) and local workers exchange information (instructions & data) using the MQTT protocol. The MQTT protocol provides various levels of quality of service, used to garantee delivery of messages.

Messages can be initiated by both the network master as well as the local worker, allthough the local worker will only initiate messages after an initial setup by the network master.

Local worker - local slave

A local worker is connected to its local slaves using a buffered I2C connection. The additional buffering is done to allow for a cable length above 1 meter (up to 10 meter).

The local worker and local slaves exchange information that all specific to the implementation of the local slave.

Documentation

Overview

Package BinkyNet contains a specification for a network architecture used to control model trains.

BinkyNet

The goals of this network architecture are:

  • Knowledge of network layout & users is centralized.
  • Highly reliable.
  • Faster than existing train networks such a LocoNet.
  • Easy to diagnose.

Introduction

BinkyNet consists of 3 major types of entities:

- The network master. This is a centralized unit that has all the knowledge of the layout & users of the network. Practically speaking this is one (or more) computers that control the operations of everything on the track (trains, switches, lighting...).

- The local worker. This is a unit that is positioned on a specific part of the track (typically 1 per module) and has the "brains" to control local slaves. This unit receives high level instructions from a network master and translates that to low level instructions for local slaves.

- The local slave. This is a unit with very little intelligence and it typically only capable of performing a single function. An example of a local slave is an I/O unit that drivers a number of lights or receives bit values from objects on the track.

These 3 entities are organized as a tree, with one or more network masters as root.

Network Technologies and Protocols

BinkyNet uses existing & well proven network technologies whereever possible.

Network master - local worker

The network master(s) and local workers are connected using a standard (100Mb+) wired ethernet, configured such that the network master and local workers under its control all share the same subnet.

The network master(s) and local workers exchange information (instructions & data) using the MQTT protocol. The MQTT protocol provides various levels of quality of service, used to garantee delivery of messages.

Messages can be initiated by both the network master as well as the local worker, allthough the local worker will only initiate messages after an initial setup by the network master.

Local worker - local slave

A local worker is connected to its local slaves using a buffered I2C connection. The additional buffering is done to allow for a cable length above 1 meter (up to 10 meter).

The local worker and local slaves exchange information that all specific to the implementation of the local slave.

Directories

Path Synopsis
apis
v1
proto_vendor
github.com/cenkalti/backoff
Package backoff implements backoff algorithms for retrying operations.
Package backoff implements backoff algorithms for retrying operations.
github.com/davecgh/go-spew/spew
Package spew implements a deep pretty printer for Go data structures to aid in debugging.
Package spew implements a deep pretty printer for Go data structures to aid in debugging.
github.com/gogo/protobuf/gogoproto
Package gogoproto provides extensions for protocol buffers to achieve:
Package gogoproto provides extensions for protocol buffers to achieve:
github.com/gogo/protobuf/proto
Package proto converts data structures to and from the wire format of protocol buffers.
Package proto converts data structures to and from the wire format of protocol buffers.
github.com/gogo/protobuf/protoc-gen-gogo/descriptor
Package descriptor provides functions for obtaining protocol buffer descriptors for generated Go types.
Package descriptor provides functions for obtaining protocol buffer descriptors for generated Go types.
github.com/golang/protobuf/proto
Package proto converts data structures to and from the wire format of protocol buffers.
Package proto converts data structures to and from the wire format of protocol buffers.
github.com/golang/protobuf/ptypes
Package ptypes contains code for interacting with well-known types.
Package ptypes contains code for interacting with well-known types.
github.com/pmezard/go-difflib/difflib
Package difflib is a partial port of Python difflib module.
Package difflib is a partial port of Python difflib module.
github.com/stretchr/testify/assert
Package assert provides a set of comprehensive testing tools for use with the normal Go testing system.
Package assert provides a set of comprehensive testing tools for use with the normal Go testing system.
github.com/stretchr/testify/require
Package require implements the same assertions as the `assert` package but stops test execution when a test fails.
Package require implements the same assertions as the `assert` package but stops test execution when a test fails.
golang.org/x/crypto/ed25519
Package ed25519 implements the Ed25519 signature algorithm.
Package ed25519 implements the Ed25519 signature algorithm.
golang.org/x/net/bpf
Package bpf implements marshaling and unmarshaling of programs for the Berkeley Packet Filter virtual machine, and provides a Go implementation of the virtual machine.
Package bpf implements marshaling and unmarshaling of programs for the Berkeley Packet Filter virtual machine, and provides a Go implementation of the virtual machine.
golang.org/x/net/http/httpguts
Package httpguts provides functions implementing various details of the HTTP specification.
Package httpguts provides functions implementing various details of the HTTP specification.
golang.org/x/net/http2
Package http2 implements the HTTP/2 protocol.
Package http2 implements the HTTP/2 protocol.
golang.org/x/net/http2/hpack
Package hpack implements HPACK, a compression format for efficiently representing HTTP header fields in the context of HTTP/2.
Package hpack implements HPACK, a compression format for efficiently representing HTTP header fields in the context of HTTP/2.
golang.org/x/net/idna
Package idna implements IDNA2008 using the compatibility processing defined by UTS (Unicode Technical Standard) #46, which defines a standard to deal with the transition from IDNA2003.
Package idna implements IDNA2008 using the compatibility processing defined by UTS (Unicode Technical Standard) #46, which defines a standard to deal with the transition from IDNA2003.
golang.org/x/net/internal/iana
Package iana provides protocol number resources managed by the Internet Assigned Numbers Authority (IANA).
Package iana provides protocol number resources managed by the Internet Assigned Numbers Authority (IANA).
golang.org/x/net/internal/socket
Package socket provides a portable interface for socket system calls.
Package socket provides a portable interface for socket system calls.
golang.org/x/net/internal/timeseries
Package timeseries implements a time series structure for stats collection.
Package timeseries implements a time series structure for stats collection.
golang.org/x/net/ipv4
Package ipv4 implements IP-level socket options for the Internet Protocol version 4.
Package ipv4 implements IP-level socket options for the Internet Protocol version 4.
golang.org/x/net/ipv6
Package ipv6 implements IP-level socket options for the Internet Protocol version 6.
Package ipv6 implements IP-level socket options for the Internet Protocol version 6.
golang.org/x/net/trace
Package trace implements tracing of requests and long-lived objects.
Package trace implements tracing of requests and long-lived objects.
golang.org/x/sys/unix
Package unix contains an interface to the low-level operating system primitives.
Package unix contains an interface to the low-level operating system primitives.
golang.org/x/sys/windows
Package windows contains an interface to the low-level operating system primitives.
Package windows contains an interface to the low-level operating system primitives.
golang.org/x/text/secure/bidirule
Package bidirule implements the Bidi Rule defined by RFC 5893.
Package bidirule implements the Bidi Rule defined by RFC 5893.
golang.org/x/text/transform
Package transform provides reader and writer wrappers that transform the bytes passing through as well as various transformations.
Package transform provides reader and writer wrappers that transform the bytes passing through as well as various transformations.
golang.org/x/text/unicode/bidi
Package bidi contains functionality for bidirectional text support.
Package bidi contains functionality for bidirectional text support.
golang.org/x/text/unicode/norm
Package norm contains types and functions for normalizing Unicode strings.
Package norm contains types and functions for normalizing Unicode strings.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL