Skip to content
This repository has been archived by the owner on Jan 22, 2023. It is now read-only.

Draft Universal Data Model

rob42 edited this page Mar 23, 2014 · 18 revisions

Ran this up as a starting point - this was created by thinking on what I need to store to allow numerous lightweight processes that receive, update, calculate, or consume data. Basically the more elaborate ones are stuff I do now, the simple ones a best guess - rob42

Also see https://github.com/tkurki/navgauge/wiki/Universal-Data-Model-Notes

{
  vessels[]
  {
    uid:{ //what to use for uid - mmsi, name, generated id?
      name:
      mmsi:
      source{self|AIS|NET}
      timezone
      navigation:{
	state moored|anchored|leaving|motoring|sailing|anchoring|mooring|fishing|drifting|mayday|panpan|mob...
	headingNorth
	headingMagnetic
	declination
	speedOverGround
	speedOverWater
	latitude
	longitude
	altitude
	pitch
	roll
	rateOfTurn
	currentRoute:{
	  route
	  startTime
	  eta
	  lastWaypoint
	  lastWaypointTime
	  nextWaypoint
	  nextWaypointEta
	  directBearing
	  actualBearing
	  courseRequired
	  xte
	}
	set
	drift
      }
      communication:{
	dscCallsign
	vhfCallsign
	hfCallsign
	hfEmail
	email
	cellPhone
	satPhone
	skipperName
      }
      environmental{
	waterTemp
	salinity
	highTideHeight
	highTideTime
	lowTideHeight
	lowTideTime
	actualTideHeight
	//water currents
	currentSpeed
	currentDirection
	airTemp
	airPressure
	airPressureChangeRateAlarm 
	humidity
	trueWindSpeed
	trueWindDirection
	apparentWindSpeed
	apparentWindDirection
	windSpeedChangeAlarm //max change in speed
	windDirectionChangeAlarm //max change in degrees
	gpsSatelliteData
      }
      alarms{
	silentInterval
	windAlarmMethod message|sound|email|sms|dsc|?
	windAlarmState off|on|alarm|silent //silent is temp
	anchorAlarmMethod message|sound|email|sms|dsc|?
	anchorAlarmState off|on|alarm|silent
	gpsAlarmMethod message|sound|email|sms|dsc|?
	gpsAlarmState off|on|alarm|silent
	autopilotAlarmMethod message|sound|email|sms|dsc|?
	autopilotAlarmState off|on|alarm|silent
	panpanAlarmMethod message|sound|email|sms|dsc|?
	maydayAlarmMethod message|sound|email|sms|dsc|?
	fireAlarmMethod message|sound|email|sms|dsc|?
	gasAlarmMethod message|sound|email|sms|dsc|?
	powerAlarmMethod message|sound|email|sms|dsc|?
	engineAlarmMethod message|sound|email|sms|dsc|?
	//more thought on alarms...should alarm values all be in one place?
      }
      power:{
	normalVoltage
	actualVoltage
	....lots here...
      }
      propulsion[]
	engine{
	type diesil|petrol|electric|?
	state stopped|started|unusable
	rpm
	rpmAlarm
	engineTemperature
	engineTemperatureAlarm
	engineTemperatureAlarm
	oilTemperature
	oilTemperatureAlarm
	oilPressure
	oilPressureAlarm
	waterTemp
	waterTempAlarm
	exhaustTemp
	exhaustTempAlarm
	fuelUsageRate //in Ltrs/h or AmpHours/h ?
      }	
      tanks[]{
	type fuel|water|holding|lpg|? wine|beer|rum :-)
	capacity
	level
	alarmLevel
      }
    
      steering{
	rudderAngle
	rudderAngleTarget
	autopilot{
	  state on|off|alarm
	  mode powersave|normal|accurate
	  targetHeading
	  currentHeading
	  alarmHeadingXte
	  headingSource wind|compass|gps
	  deadZone
	  backlash
	  gain
	  maxDriveAmps
	  maxDriveRate
	  portLock
	  starboardLock
	}
      }
    }

  charts[]
    {
      datum
      boundary 
      date
      scale
      url
    }

  waypoints[] //points on the chart
    {
	name
	latitude
	longitude
	comment
	type location|fish|anchor|hazard|rock|bar|?
	source
      }

  regions[] //areas of the chart
    {
      name
      comment
      source
      type hazard|safe|reserve|?
      boundary[waypoints]
    }

  routes[]
    { 
      uid
      name
      comment
      source
      waypoints[]
      distance
    }
  }
}