Skip to content
This repository has been archived by the owner on Mar 20, 2021. It is now read-only.

Decentralized Concept with HamCloud Database Backbone

Ralf Wilke DH3WR edited this page Jun 28, 2018 · 2 revisions

Overview

General description:

Main Ideas:

  • Seperation of data into two groups:

Group 1: "Database" "Static information"

  • Account database
  • RIC assigment
  • Rubric-Number and Names assigment
  • Rubric-Content assigment
  • Transmitter configuration and Transmitter Telemetry storage
  • Transmitter-Groups assigment
  • Core configuration (members/Status/connected Transmitters)

Distribution Option (All equal mesh with Hamcloud of "always right instance" for conflict solving)

  • Use of CouchDB as Database concept
  • Document based, NoSQL
  • Each Node runs CouchDB instance
  • Writes to every Node possible
  • In case of conflicts CouchDB-Instances in the HAMCLOUD are "always right"
  • Structure of document based DBs is already present in State.json export

Group 2: Data to be transmitted

  • Use of RabbitMQ as more sofisticated Middleware
  • Maybe RabbitMQ as Cluster in HAMCLOUD (Network connectivity mandatory, but that's possible)
  • Other Cores are connected by federations
  • Mesh topology seem possible without loops (TBC) (what is a suitable value for max-hop(TTL?) Depending on Topology?)
  • Unipager acts as RabbitMQ Client
  • Traffic to transmit by Unipager is organized by topic approach (e.g. .txdata)
  • Open issue: Queue for Transmitter is maintained at Node 1, what happens to that queue if TX moves to Node 2? Delete Queue? Move Queue?
  • Open issues:
    • For Database updates coming from REST API a distr. Node, use Mode RPC to broadcast changes in data
    • Not nesessary for CouchDB

Transmitter connection (Unipager, MMDVM and DAPNET-Proxy)

  • At start try to get valid Core IPs via fixed seed URLs on HAMCLOUD instances and via dapnet.afu.rwth-aachen.description
  • RabbitMQ Client connection to RabbitMQ Broker with failover
  • Data to transmit and Timeslot-Config is got by subscribing to topic (bidirectional with Status feedback to DAPNET)
  • Data to transmit is build up completly by emmiting Core; no need of database interactions afterwards on forwarding/distribution Cores

Transmitter topics (To be adapted to RabbitMQ topic notiation

transmitters/<call>/general/transmitterwritable/connstatus ENUM('ONLINE', 'OFFLINE', 'NON_GRACEFUL_OFFLINE') NOT NULL)
transmitters/<call>/general/transmitterwritable/ntp_sync (BOOLEAN NOT NULL)
transmitters/<call>/general/transmitterwritable/OS (LINXU/Windows/... tbd.)
transmitters/<call>/general/transmitterwritable/kernel_version (tbd.)
transmitters/<call>/general//transmitterwritable/device_type (VARCHAR(30))
transmitters/<call>/general//transmitterwritable/device_version (VARCHAR(30))

transmitters/<call>/general/last_update (DATETIME)
transmitters/<call>/general/last_connect (DATETIME)
transmitters/<call>/general/connected_since (DATETIME)
transmitters/<call>/general/ip_address (VARCHAR(45))

transmitters/<call>/telemetry/txstatus (ENUM('ONAIR', 'OFFAIR'))

transmitters/<call>/telemetry/queue (Total)
transmitters/<call>/telemetry/queue/prio1
...
transmitters/<call>/telemetry/queue/prio5

transmitters/<call>/telemetry/temperature/sensor1name
transmitters/<call>/telemetry/temperature/sensor1value
...
transmitters/<call>/telemetry/temperature/sensor4name
transmitters/<call>/telemetry/temperature/sensor4value

transmitters/<call>/telemetry/power/forward
transmitters/<call>/telemetry/power/reflected

transmitters/<call>/configuration/timeslots ([0-F])
transmitters/<call>/configuration/is_enabled (BOOLEAN NOT NULL)
transmitters/<call>/configuration/usage_type (ENUM('PERSONAL', 'WIDERANGE') NOT NULL)
transmitters/<call>/configuration/aprs_enabled (BOOLEAN NOT NULL)
transmitters/<call>/configuration/node_id (INT)
transmitters/<call>/configuration/latitude (DECIMAL(9, 6))
transmitters/<call>/configuration/longitude (DECIMAL(9, 6))
transmitters/<call>/configuration/location_name (VARCHAR(60))
transmitters/<call>/configuration/rf_power (FLOAT)
transmitters/<call>/configuration/antenna_agl (SMALLINT)
transmitters/<call>/configuration/antenna_gain_dbi (FLOAT)
transmitters/<call>/configuration/antenna_type (ENUM('OMNI', 'DIRECTIONAL'))
transmitters/<call>/configuration/antenna_direction (SMALLINT)

transmitters/<call>/transmissions/prio1
...
transmitters/<call>/transmissions/prio5

Node topics

nodes//status nodes//last_update nodes//version nodes//ip_address nodes//latitude nodes//longitude