├── .dockerignore ├── .editorconfig ├── .github ├── FUNDING.yml ├── dependabot.yml └── workflows │ ├── build-base-image.yml │ ├── build-docker.yml │ ├── release.yml │ ├── require_pr_label.yml │ └── test.yml ├── .gitignore ├── .mocharc.js ├── .npmignore ├── .npmrc ├── .nvmrc ├── .prettierignore ├── .prettierrc.json ├── .python-version ├── CHANGELOG.md ├── LICENSE ├── Procfile ├── README.md ├── bin ├── actisense-serial-n2kd ├── linkpackages ├── log2sk ├── multiple-sources ├── n2k-from-actisense ├── n2k-from-file ├── nmea-from-file ├── nmea-from-file-filtered ├── nmea-from-serial ├── nmea-from-tcp ├── nmea-from-udp ├── signalk-generate-token ├── signalk-server ├── signalk-server-setup ├── simulator └── ssl-n2k-from-file ├── docker ├── Dockerfile ├── Dockerfile_base_22.04 ├── Dockerfile_base_24.04 ├── Dockerfile_rel ├── README.md ├── avahi │ └── avahi-dbus.conf ├── bluez │ └── bluezuser.conf ├── docker-compose.yml ├── startup.sh └── v2_demo │ ├── Dockerfile │ ├── course-data.json │ ├── resources-provider.json │ ├── resources │ ├── routes │ │ ├── ad825f6c-1ae9-4f76-abc4-df2866b14b78 │ │ └── da825f6c-1ae9-4f76-abc4-df2866b14b78 │ └── waypoints │ │ ├── ac3a3b2d-07e8-4f25-92bc-98e7c92f7f1a │ │ └── afe46290-aa98-4d2f-9c04-d199ca64942e │ ├── serverstate │ └── course │ │ └── settings.json │ └── startup_heroku_demo.sh ├── docs ├── README.md ├── breaking_changes.md ├── develop │ ├── README.md │ ├── contributing.md │ ├── plugins │ │ ├── README.md │ │ ├── autopilot_provider_plugins.md │ │ ├── configuration.md │ │ ├── deltas.md │ │ ├── publishing.md │ │ └── resource_provider_plugins.md │ ├── rest-api │ │ ├── README.md │ │ ├── anchor_api.md │ │ ├── autopilot_api.md │ │ ├── course_api.md │ │ ├── course_calculations.md │ │ ├── notifications_api.md │ │ ├── plugin_api.md │ │ └── resources_api.md │ └── webapps.md ├── guides │ ├── README.md │ ├── anchoralarm │ │ ├── alarmsilencer.jpg │ │ ├── anchor_alarm_plugin_ui.png │ │ ├── anchoralarm.md │ │ ├── anchoralarmplugin.jpg │ │ ├── appstore_available.png │ │ ├── connections.jpg │ │ ├── freeboardsk_anchor_alarm.png │ │ ├── freeboardsk_anchor_watch.png │ │ ├── mfd_notification.png │ │ ├── pushnotificationplugin.jpg │ │ ├── tracks.jpg │ │ ├── vesseldata.png │ │ ├── wsk.png │ │ ├── wsk_connection.jpg │ │ ├── wsk_connections.jpg │ │ ├── wsk_error.jpg │ │ ├── wsk_ios.jpg │ │ ├── wsk_notifications.jpg │ │ ├── wsk_phone.png │ │ └── wsk_screen.png │ ├── datalogging │ │ └── datalogging.md │ └── navdataserver │ │ ├── enable0183.png │ │ ├── n2kais2nmea0183.png │ │ ├── navdataserver.md │ │ ├── navionics.png │ │ ├── sk2nmea0183.png │ │ └── vesseldata.png ├── img │ ├── autopilot_provider.dia │ ├── autopilot_provider.svg │ ├── calibration.png │ ├── course_provider.dia │ ├── course_provider.svg │ ├── logo.png │ ├── resource_provider.dia │ ├── resource_provider.svg │ ├── server_only.dia │ ├── server_only.svg │ ├── server_update.png │ └── vesselpositions.png ├── installation │ ├── README.md │ ├── command_line.md │ ├── raspberry_pi_installation.md │ └── updating.md ├── security.md ├── setup │ ├── SK_file_stream_N2K.png │ ├── configuration.md │ ├── generating_tokens.md │ └── seatalk │ │ ├── README.md │ │ ├── config.png │ │ ├── gpio.png │ │ ├── seatalk-dcdc.png │ │ ├── seatalk_circuit_2.jpg │ │ ├── seatalk_circuit_3.jpg │ │ └── seatalk_circuit_4.jpg ├── support │ ├── help.md │ └── sponsor.md └── whats_new.md ├── empty_file ├── eslint.config.js ├── fly_io ├── cr_signalk_io │ ├── Dockerfile │ ├── fly.toml │ └── nginx.conf └── demo_signalk_org │ ├── Dockerfile │ └── fly.toml ├── img └── releasing.png ├── index.js ├── kubernetes.md ├── kubernetes ├── README.md ├── signalk-deployment.yaml └── signalk-ingress.yaml ├── package-lock.json ├── package.json ├── packages ├── resources-provider-plugin │ ├── .gitignore │ ├── .npmignore │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── package.json │ ├── src │ │ ├── @types │ │ │ └── geojson-validation.d.ts │ │ ├── index.ts │ │ ├── lib │ │ │ ├── filestorage.ts │ │ │ └── utils.ts │ │ └── types │ │ │ ├── index.ts │ │ │ └── store.ts │ └── tsconfig.json ├── server-admin-ui-dependencies │ ├── index.js │ ├── package-lock.json │ └── package.json ├── server-admin-ui │ ├── .gitignore │ ├── .npmignore │ ├── README.md │ ├── package.json │ ├── public_src │ │ ├── img │ │ │ ├── favicon.ico │ │ │ ├── logo-symbol.png │ │ │ ├── signal-k-logo-image-text.svg │ │ │ └── signal-k-logo-image.svg │ │ └── index.html │ ├── scss │ │ ├── _bootstrap-variables.scss │ │ ├── _core-variables.scss │ │ ├── _custom.scss │ │ ├── core │ │ │ ├── _animate.scss │ │ │ ├── _aside.scss │ │ │ ├── _avatars.scss │ │ │ ├── _badge.scss │ │ │ ├── _breadcrumb-menu.scss │ │ │ ├── _breadcrumb.scss │ │ │ ├── _buttons.scss │ │ │ ├── _callout.scss │ │ │ ├── _card.scss │ │ │ ├── _charts.scss │ │ │ ├── _dropdown-menu-right.scss │ │ │ ├── _dropdown.scss │ │ │ ├── _footer.scss │ │ │ ├── _grid.scss │ │ │ ├── _input-group.scss │ │ │ ├── _layout.scss │ │ │ ├── _loading.scss │ │ │ ├── _mixins.scss │ │ │ ├── _mobile.scss │ │ │ ├── _modal.scss │ │ │ ├── _nav.scss │ │ │ ├── _navbar.scss │ │ │ ├── _others.scss │ │ │ ├── _progress.scss │ │ │ ├── _rtl.scss │ │ │ ├── _sidebar.scss │ │ │ ├── _switches.scss │ │ │ ├── _tables.scss │ │ │ ├── _temp.scss │ │ │ ├── _typography.scss │ │ │ ├── _utilities.scss │ │ │ ├── _variables.scss │ │ │ ├── _widgets.scss │ │ │ ├── core.scss │ │ │ └── utilities │ │ │ │ ├── _background.scss │ │ │ │ ├── _borders.scss │ │ │ │ └── _display.scss │ │ ├── style.scss │ │ └── vendors │ │ │ ├── _variables.scss │ │ │ └── chart.js │ │ │ └── chart.scss │ ├── src │ │ ├── actions.js │ │ ├── bootstrap.js │ │ ├── components │ │ │ ├── Aside │ │ │ │ └── Aside.js │ │ │ ├── Footer │ │ │ │ └── Footer.js │ │ │ ├── Header │ │ │ │ └── Header.js │ │ │ ├── Sidebar │ │ │ │ └── Sidebar.js │ │ │ ├── SidebarFooter │ │ │ │ └── SidebarFooter.js │ │ │ ├── SidebarForm │ │ │ │ └── SidebarForm.js │ │ │ ├── SidebarHeader │ │ │ │ └── SidebarHeader.js │ │ │ └── SidebarMinimizer │ │ │ │ └── SidebarMinimizer.js │ │ ├── containers │ │ │ └── Full │ │ │ │ └── Full.js │ │ ├── fa-pulse.css │ │ ├── index.js │ │ ├── routes.js │ │ └── views │ │ │ ├── Configuration │ │ │ ├── Configuration.js │ │ │ └── EmbeddedPluginConfigurationForm.js │ │ │ ├── Dashboard │ │ │ └── Dashboard.js │ │ │ ├── DataBrowser │ │ │ ├── DataBrowser.js │ │ │ └── Meta.js │ │ │ ├── Playground.js │ │ │ ├── ServerConfig │ │ │ ├── BackupRestore.js │ │ │ ├── BasicProvider.js │ │ │ ├── Logging.js │ │ │ ├── N2KFilters.js │ │ │ ├── PluginConfigurationForm.js │ │ │ ├── ProvidersConfiguration.js │ │ │ ├── ServerLog.js │ │ │ ├── ServerUpdate.js │ │ │ ├── Settings.js │ │ │ ├── SourcePriorities.js │ │ │ ├── VesselConfiguration.js │ │ │ └── main.jsx │ │ │ ├── Webapps │ │ │ ├── Embedded.js │ │ │ ├── Webapp.js │ │ │ ├── Webapps.js │ │ │ ├── dynamicutilities.js │ │ │ └── loadingerror.js │ │ │ ├── appstore │ │ │ ├── Apps │ │ │ │ ├── Apps.js │ │ │ │ └── WarningBox.js │ │ │ ├── AppsList.js │ │ │ ├── Grid │ │ │ │ └── cell-renderers │ │ │ │ │ ├── ActionCellRenderer.js │ │ │ │ │ ├── NameCellRenderer.js │ │ │ │ │ ├── TypeCellRenderer.js │ │ │ │ │ └── VersionCellRenderer.js │ │ │ └── appStore.scss │ │ │ └── security │ │ │ ├── AccessRequests.js │ │ │ ├── Devices.js │ │ │ ├── EnableSecurity.js │ │ │ ├── Login.js │ │ │ ├── Register.js │ │ │ ├── Settings.js │ │ │ └── Users.js │ └── webpack.config.js ├── server-api │ ├── .gitignore │ ├── .npmignore │ ├── .npmrc │ ├── package.json │ ├── src │ │ ├── autopilotapi.ts │ │ ├── brand.ts │ │ ├── course.ts │ │ ├── coursetypes.ts │ │ ├── deltas.test.ts │ │ ├── deltas.ts │ │ ├── features.ts │ │ ├── index.ts │ │ ├── plugin.ts │ │ ├── propertyvalues.test.ts │ │ ├── propertyvalues.ts │ │ ├── resourcesapi.ts │ │ ├── resourcetypes.ts │ │ ├── serverapi.ts │ │ ├── streambundle.ts │ │ └── subscriptionmanager.ts │ ├── tsconfig.json │ └── typedoc.json ├── streams │ ├── .npmrc │ ├── README.md │ ├── actisense-serial.js │ ├── autodetect.js │ ├── canboatjs.js │ ├── canbus.js │ ├── execute.js │ ├── filestream.js │ ├── folderstream.js │ ├── from_json.js │ ├── gpiod-seatalk.js │ ├── gpsd.js │ ├── keys-filter.js │ ├── liner.js │ ├── log.js │ ├── logging.js │ ├── mdns-ws.js │ ├── multiplexedlog.js │ ├── n2k-signalk.js │ ├── n2kAnalyzer.js │ ├── nmea0183-signalk.js │ ├── nullprovider.js │ ├── package.json │ ├── pigpio-seatalk.js │ ├── replacer.js │ ├── s3.js │ ├── serialport.js │ ├── simple.js │ ├── splitting-liner.js │ ├── tcp.js │ ├── tcpserver.js │ ├── throttle.js │ ├── timestamp-throttle.js │ └── udp.js └── typedoc-theme │ ├── .gitignore │ ├── LICENSE │ ├── README.md │ ├── package.json │ ├── src │ ├── SignalKTheme.tsx │ ├── SignalKThemeContext.tsx │ ├── assets │ │ └── theme.css │ ├── index.tsx │ └── partials │ │ └── toolbar.tsx │ └── tsconfig.json ├── public ├── examples │ ├── http-example.html │ ├── index.html │ └── loginform.html ├── favicon.ico ├── signal-k-logo-image-text.svg └── signalk-logo-transparent.png ├── releasing.md ├── samples ├── aava-n2k.data ├── gofree-merrimac.log ├── gps.log ├── n2kd-183-merrimac.log ├── nais300-merrimac.log ├── nais400-merrimac.log └── plaka.log ├── settings ├── actisense-serial-settings.json ├── commandline-provider-settings.json ├── defaults.json-sample ├── multiple-sources.json ├── multiplexed.json ├── n2k-from-file-settings.json ├── settings.json ├── signalk-ws-settings.json ├── simulator.json ├── volare-file-settings-filtered.json ├── volare-file-settings.json ├── volare-gpsd-settings.json ├── volare-serial-settings.json ├── volare-tcp-settings.json └── volare-udp-settings.json ├── src ├── @types │ ├── api-schema-builder.d.ts │ ├── express-easy-zip.d.ts │ └── signalk_signalk-schema.d.ts ├── api │ ├── apps │ │ ├── openApi.json │ │ └── openApi.ts │ ├── autopilot │ │ ├── index.ts │ │ ├── openApi.json │ │ └── openApi.ts │ ├── course │ │ ├── index.ts │ │ ├── openApi.json │ │ └── openApi.ts │ ├── discovery │ │ ├── index.ts │ │ ├── openApi.json │ │ └── openApi.ts │ ├── index.ts │ ├── notifications │ │ ├── openApi.json │ │ └── openApi.ts │ ├── resources │ │ ├── index.ts │ │ ├── openApi.json │ │ ├── openApi.ts │ │ └── validate.ts │ ├── security │ │ ├── openApi.json │ │ └── openApi.ts │ └── swagger.ts ├── app.ts ├── categories.ts ├── config │ ├── config.test.js │ ├── config.ts │ ├── development.js │ ├── get.js │ └── production.js ├── constants.ts ├── cors.ts ├── debug.ts ├── deltaPriority.ts ├── deltacache.ts ├── deltachain.ts ├── deltaeditor.ts ├── deltastats.ts ├── discovery.js ├── dummysecurity.ts ├── events.ts ├── index.ts ├── interfaces │ ├── applicationData.js │ ├── appstore.js │ ├── index.js │ ├── logfiles.js │ ├── mfd_webapp.ts │ ├── nmea-tcp.js │ ├── playground.js │ ├── plugins.ts │ ├── providers.js │ ├── rest.js │ ├── tcp.ts │ ├── webapps.js │ └── ws.js ├── logging.js ├── mdns.js ├── modules.ts ├── pipedproviders.ts ├── ports.ts ├── put.js ├── redirects.json ├── requestResponse.js ├── security.ts ├── serialports.ts ├── serverroutes.ts ├── serverstate │ └── store.ts ├── streambundle.ts ├── subscriptionmanager.ts ├── tokensecurity.js ├── types.ts └── zones.ts ├── test-server-as-include ├── package.json ├── run.sh └── works-as-include.js ├── test ├── acls.js ├── applicationData.js ├── course.ts ├── delete.js ├── deltaPriority.ts ├── deltacache.js ├── history.js ├── httpprovider.js ├── metadata.js ├── modules.js ├── multiple-values.js ├── plugin-test-config │ ├── node_modules │ │ ├── esm-plugin │ │ │ ├── index.js │ │ │ └── package.json │ │ └── testplugin │ │ │ ├── index.js │ │ │ ├── openApi.json │ │ │ └── package.json │ └── package.json ├── plugins.js ├── providers.js ├── put.js ├── resources.ts ├── security.js ├── server-test-config │ ├── .npmrc │ └── package.json ├── servertestutilities.js ├── subscriptions.js └── ts-servertestutilities.ts ├── tsconfig.base.json ├── tsconfig.json ├── typedoc.json └── util └── start-stop.js /.dockerignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | packages 3 | work 4 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: [sbender9, tkurki] 2 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | # Enable version updates for npm 4 | - package-ecosystem: 'npm' 5 | # Look for `package.json` and `lock` files in the `root` directory 6 | directory: '/' 7 | # Check the npm registry for updates every day (weekdays) 8 | schedule: 9 | interval: 'monthly' 10 | open-pull-requests-limit: 25 11 | 12 | # Enable version updates for Docker 13 | - package-ecosystem: 'docker' 14 | # Look for a `Dockerfile` in the `root` directory 15 | directory: '/' 16 | # Check for updates once a week 17 | schedule: 18 | interval: 'monthly' 19 | 20 | # Enable version updates for GitHub Actions 21 | - package-ecosystem: 'github-actions' 22 | directory: '/' 23 | schedule: 24 | interval: 'monthly' 25 | -------------------------------------------------------------------------------- /.github/workflows/require_pr_label.yml: -------------------------------------------------------------------------------- 1 | name: Pull Request Labels 2 | on: 3 | pull_request: 4 | types: [opened, labeled, unlabeled, synchronize] 5 | jobs: 6 | label: 7 | runs-on: ubuntu-latest 8 | steps: 9 | - uses: mheap/github-action-required-labels@v5 10 | with: 11 | mode: exactly 12 | count: 1 13 | labels: 'fix, feature, doc, chore, test, ignore, other, dependencies, refactor' 14 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: CI test 2 | 3 | on: 4 | pull_request: 5 | push: 6 | branches: [master] 7 | 8 | jobs: 9 | build: 10 | runs-on: ubuntu-latest 11 | 12 | strategy: 13 | matrix: 14 | node-version: [20.x, 22.x] 15 | 16 | steps: 17 | - uses: actions/checkout@v4 18 | - name: Use Node.js ${{ matrix.node-version }} 19 | uses: actions/setup-node@v4 20 | with: 21 | node-version: ${{ matrix.node-version }} 22 | - run: npm install 23 | - run: npm run build:all 24 | 25 | - name: server-api 26 | working-directory: ./packages/server-api 27 | run: | 28 | npm run test 29 | 30 | - name: resources-provider-plugin 31 | working-directory: ./packages/resources-provider-plugin 32 | run: | 33 | npm run test 34 | 35 | - run: npm test 36 | env: 37 | CI: true 38 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | !test/plugin-test-config/node_modules/ 3 | 4 | *.tsbuildinfo 5 | 6 | lib/ 7 | dist/ 8 | 9 | .DS_Store 10 | .vscode/ 11 | *.db 12 | logs/* 13 | bower_components 14 | settings/ssl-key.pem 15 | settings/ssl-cert.pem 16 | /*.iml 17 | 18 | *.tgz 19 | work/ 20 | 21 | test/plugin-test-config/.npmrc 22 | test/plugin-test-config/plugin-config-data/ 23 | test/plugin-test-config/ssl-cert.pem 24 | test/plugin-test-config/ssl-key.pem 25 | test/plugin-test-config/baseDeltas.json 26 | 27 | test/server-test-config/applicationData/ 28 | test/server-test-config/ssl-cert.pem 29 | test/server-test-config/ssl-key.pem 30 | test/server-test-config/plugin-config-data/ 31 | 32 | docs/dist 33 | -------------------------------------------------------------------------------- /.mocharc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | require: ['ts-node/register'], 3 | extensions: ['ts', 'tsx', 'js'], 4 | timeout: 20000, 5 | exit: true 6 | } 7 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | 6 | # Runtime data 7 | pids 8 | *.pid 9 | *.seed 10 | 11 | # Directory for instrumented libs generated by jscoverage/JSCover 12 | lib-cov 13 | 14 | # Coverage directory used by tools like istanbul 15 | coverage 16 | 17 | # nyc test coverage 18 | .nyc_output 19 | 20 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 21 | .grunt 22 | 23 | # node-waf configuration 24 | .lock-wscript 25 | 26 | # Compiled binary addons (http://nodejs.org/api/addons.html) 27 | build/Release 28 | 29 | # Dependency directories 30 | node_modules 31 | jspm_packages 32 | 33 | # Optional npm cache directory 34 | .npm 35 | 36 | # Optional REPL history 37 | .node_repl_history 38 | 39 | src 40 | public_src 41 | webpack.config.js 42 | scss 43 | compilation-stats.json 44 | .babelrc 45 | public/*.hot-update.js 46 | public/*.hot-update.json 47 | 48 | plugin-config-data/ 49 | 50 | samples/* 51 | !samples/plaka.log 52 | !samples/aava-n2k.data 53 | 54 | work/* 55 | 56 | npm-debug.log 57 | .vscode 58 | 59 | letsencrypt 60 | 61 | docker 62 | 63 | test 64 | dist/**/*.test.js* 65 | 66 | packages 67 | 68 | # Build artifacts from build-docker.yml workflow 69 | *.tgz 70 | 71 | publishing.md 72 | 73 | bin/linkpackages 74 | 75 | fly_io 76 | .github 77 | 78 | /docs/* 79 | !/docs/dist 80 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | package-lock=false 2 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | 22 2 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | *.guard.ts 2 | public 3 | -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "semi": false, 3 | "singleQuote": true, 4 | "trailingComma": "none" 5 | } 6 | -------------------------------------------------------------------------------- /.python-version: -------------------------------------------------------------------------------- 1 | 3.11 2 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## Please see [Releases](https://github.com/SignalK/signalk-server-node/releases) for the release notes. 2 | -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | web: bin/signalk-server -s ./settings/n2k-from-file-settings.json 2 | -------------------------------------------------------------------------------- /bin/actisense-serial-n2kd: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | actisense-serial /dev/tty.usbserial-1FD34 | analyzer -json | tee >(n2kd) 4 | -------------------------------------------------------------------------------- /bin/linkpackages: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | pushd packages/server-admin-ui && npm link && cd ../streams && npm link && popd && npm link @signalk/server-admin-ui && npm link @signalk/streams -------------------------------------------------------------------------------- /bin/log2sk: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env -S node --enable-source-maps 2 | 3 | if (process.argv.length < 3) { 4 | console.log('Usage: log2sk ') 5 | process.exit(-1) 6 | } 7 | 8 | const app = { 9 | config: { 10 | configPath: __dirname 11 | }, 12 | emit: () => {}, 13 | on: () => {}, 14 | handleMessage: (id, delta) => console.log(JSON.stringify(delta)), 15 | propertyValues: { 16 | onPropertyValues: () => undefined 17 | }, 18 | wrappedEmitter: { 19 | bindMethodsById: () => {} 20 | } 21 | } 22 | 23 | new require('../dist/pipedproviders').pipedProviders(app).createPipedProvider({ 24 | pipeElements: [ 25 | { 26 | type: 'providers/simple', 27 | options: { 28 | logging: false, 29 | noThrottle: true, 30 | type: 'FileStream', 31 | subOptions: { 32 | dataType: 'Multiplexed', 33 | filename: process.argv[2], 34 | noThrottle: true, 35 | keepRunning: false 36 | }, 37 | app 38 | } 39 | } 40 | ] 41 | }) 42 | -------------------------------------------------------------------------------- /bin/multiple-sources: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | DIR=`dirname $0` 4 | ${DIR}/signalk-server -s ${DIR}/../settings/multiple-sources.json $* 5 | -------------------------------------------------------------------------------- /bin/n2k-from-actisense: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | DIR=`dirname $0` 4 | ${DIR}/signalk-server -s ${DIR}/../settings/actisense-serial-settings.json $* 5 | -------------------------------------------------------------------------------- /bin/n2k-from-file: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | DIR=`dirname $0` 4 | ${DIR}/signalk-server -s ${DIR}/../settings/n2k-from-file-settings.json $* 5 | -------------------------------------------------------------------------------- /bin/nmea-from-file: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | DIR=`dirname $0` 4 | ${DIR}/signalk-server -s ${DIR}/../settings/volare-file-settings.json $* 5 | -------------------------------------------------------------------------------- /bin/nmea-from-file-filtered: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | DIR=`dirname $0` 4 | ${DIR}/signalk-server -s ${DIR}/../settings/volare-file-settings-filtered.json $* 5 | -------------------------------------------------------------------------------- /bin/nmea-from-serial: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | DIR=`dirname $0` 4 | ${DIR}/signalk-server -s ${DIR}/../settings/volare-serial-settings.json $* 5 | -------------------------------------------------------------------------------- /bin/nmea-from-tcp: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" 4 | $DIR/signalk-server -s ./settings/volare-tcp-settings.json $* -------------------------------------------------------------------------------- /bin/nmea-from-udp: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" 4 | $DIR/signalk-server -s ./settings/volare-udp-settings.json $* -------------------------------------------------------------------------------- /bin/signalk-generate-token: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env -S node --enable-source-maps 2 | 3 | const minimist = require('minimist') 4 | const fs = require('fs') 5 | const jwt = require('jsonwebtoken') 6 | 7 | var args = minimist(process.argv.slice(2)) 8 | 9 | var user = args.user || args.u 10 | var settingsPath = args.settings || args.s 11 | var expiration = args.expiration || args.e 12 | 13 | if (!user || !settingsPath || !expiration) { 14 | console.error( 15 | 'usage: signalk-generate-token -u userid -e 1y -s /path/to/security.json' 16 | ) 17 | process.exit(1) 18 | } 19 | 20 | var settings = readJson(settingsPath) 21 | var payload = { id: user } 22 | 23 | console.log(jwt.sign(payload, settings.secretKey, { expiresIn: expiration })) 24 | 25 | function readJson(path) { 26 | try { 27 | const optionsAsString = fs.readFileSync(path, 'utf8') 28 | try { 29 | return JSON.parse(optionsAsString) 30 | } catch (e) { 31 | console.error('Could not parse JSON options:' + optionsAsString) 32 | console.error(e) 33 | } 34 | } catch (e) { 35 | console.error('Could not load security settings') 36 | console.error(e) 37 | } 38 | return null 39 | } 40 | -------------------------------------------------------------------------------- /bin/signalk-server: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env -S node --enable-source-maps 2 | 3 | /* 4 | * Copyright 2014-2015 Fabian Tollenaar 5 | * 6 | * Licensed under the Apache License, Version 2.0 (the "License"); 7 | * you may not use this file except in compliance with the License. 8 | * You may obtain a copy of the License at 9 | * 10 | * http://www.apache.org/licenses/LICENSE-2.0 11 | 12 | * Unless required by applicable law or agreed to in writing, software 13 | * distributed under the License is distributed on an "AS IS" BASIS, 14 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | * See the License for the specific language governing permissions and 16 | * limitations under the License. 17 | */ 18 | 19 | const { engines } = require('../package.json') 20 | const semver = require('semver') 21 | const minimumVersion = engines.node 22 | const recommendedVersion = '20 - 22' 23 | 24 | if (!semver.satisfies(process.version, minimumVersion)) { 25 | console.error( 26 | `The installed version of node (${process.version}) is older than the minimum required version (${minimumVersion}). See https://github.com/SignalK/signalk-server/wiki/Installing-and-Updating-Node.js for more information how to upgrade.` 27 | ) 28 | process.exit(1) 29 | } else if (!semver.satisfies(process.version, recommendedVersion)) { 30 | console.warn( 31 | `The installed version of node (${process.version}) is different than the recommended version (${recommendedVersion}). See https://github.com/SignalK/signalk-server/wiki/Installing-and-Updating-Node.js for more information how to upgrade.` 32 | ) 33 | } 34 | 35 | const Server = require('../dist') 36 | const server = new Server() 37 | 38 | process.on('uncaughtException', (err) => { 39 | console.error(err) 40 | }) 41 | 42 | server.start().catch((err) => { 43 | console.log(err) 44 | process.exit(-1) 45 | }) 46 | -------------------------------------------------------------------------------- /bin/simulator: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | mkdir -p plugin-config-data 4 | 5 | if [ ! -f node_modules/signalk-simulator ]; then 6 | npm install signalk/simulatorplugin 7 | fi 8 | 9 | if [ ! -f plugin-config-data/simulator.json ]; then 10 | cat >plugin-config-data/simulator.json < 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /docker/bluez/bluezuser.conf: -------------------------------------------------------------------------------- 1 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /docker/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '2.2' 2 | services: 3 | signalk-server: 4 | image: cr.signalk.io/signalk/signalk-server:latest 5 | container_name: signalk-server 6 | restart: unless-stopped 7 | # ---------------------- 8 | network_mode: host 9 | # network_mode: bridge # (1/3) If bridge-mode is used, then comment line abobe (host) and select/add needed ports settings 10 | # ports: # (2/3) 11 | # - "3000:3000" # (3/3) 12 | # ---------------------- 13 | # environment: # (1/5) SK ENV parameters 14 | # - PORT=3000 # (2/5) 15 | # - SSLPORT=3443 # (3/5) 16 | # - NMEA0183PORT=10110 # (4/5) 17 | # - TCPSTREAMPORT=8375 # (5/5) 18 | # ---------------------- 19 | volumes: 20 | - /dev:/dev 21 | # - $PWD/signalk_conf:/home/node/.signalk # uncomment and make signalk_conf -folder where .signalk is bind mounted 22 | # ---------------------- 23 | # - type: bind # (1/3) uncomment these 3 lines to control startup.sh outside container 24 | # source: $PWD/startup.sh # (2/3) 25 | # target: /home/node/signalk/startup.sh # (3/3) 26 | # ---------------------- 27 | entrypoint: sh /home/node/signalk/startup.sh 28 | privileged: true 29 | logging: 30 | options: 31 | max-size: 10m 32 | -------------------------------------------------------------------------------- /docker/startup.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | service dbus restart 3 | /usr/sbin/avahi-daemon -k 4 | /usr/sbin/avahi-daemon --no-drop-root & 5 | service bluetooth restart 6 | /usr/lib/node_modules/signalk-server/bin/signalk-server --securityenabled 7 | -------------------------------------------------------------------------------- /docker/v2_demo/Dockerfile: -------------------------------------------------------------------------------- 1 | # docker buildx build --platform linux/amd64 -f Dockerfile_heroku_api_demo -t registry.heroku.com/signalk-course-resources-api/web . && \ 2 | # docker push registry.heroku.com/signalk-course-resources-api/web && \ 3 | # heroku container:release web -a signalk-course-resources-api 4 | FROM signalk/signalk-server:resources_course_api 5 | 6 | USER root 7 | 8 | WORKDIR /home/node/signalk 9 | COPY startup_heroku_demo.sh startup.sh 10 | RUN chmod +x startup.sh 11 | 12 | COPY resources /home/node/.signalk/resources 13 | COPY resources-provider.json /home/node/.signalk/plugin-config-data/ 14 | COPY course-data.json /home/node/.signalk/plugin-config-data/ 15 | COPY serverState /home/node/.signalk/serverState 16 | RUN chown -R node /home/node/.signalk 17 | 18 | USER node 19 | -------------------------------------------------------------------------------- /docker/v2_demo/course-data.json: -------------------------------------------------------------------------------- 1 | { 2 | "configuration": { 3 | "notifications": {}, 4 | "calculations": { 5 | "method": "Rhumbline", 6 | "autopilot": true 7 | } 8 | }, 9 | "enabled": true 10 | } 11 | -------------------------------------------------------------------------------- /docker/v2_demo/resources-provider.json: -------------------------------------------------------------------------------- 1 | { 2 | "configuration": { 3 | "standard": { 4 | "routes": true, 5 | "waypoints": true, 6 | "notes": true, 7 | "regions": true 8 | }, 9 | "custom": [], 10 | "path": "./resources" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /docker/v2_demo/resources/routes/ad825f6c-1ae9-4f76-abc4-df2866b14b78: -------------------------------------------------------------------------------- 1 | {"distance":18912,"name":"test route","description":"testing route stuff","feature":{"type":"Feature","geometry":{"type":"LineString","coordinates":[[23.421658428594455,59.976383142599445],[23.39545298552773,59.964698713370666],[23.386547033272887,59.94553321282956],[23.349311506736232,59.92852692137802],[23.352379069279134,59.912782827217114],[23.420858546854152,59.91443887159909],[23.529026801965298,59.9327648091369]]},"properties":{},"id":""}} -------------------------------------------------------------------------------- /docker/v2_demo/resources/routes/da825f6c-1ae9-4f76-abc4-df2866b14b78: -------------------------------------------------------------------------------- 1 | {"distance":18912,"name":"test route","description":"testing route stuff","feature":{"type":"Feature","geometry":{"type":"LineString","coordinates":[[23.421658428594455,59.976383142599445],[23.39545298552773,59.964698713370666],[23.386547033272887,59.94553321282956],[23.349311506736232,59.92852692137802],[23.352379069279134,59.912782827217114],[23.420858546854152,59.91443887159909],[23.529026801965298,59.9327648091369]]},"properties":{},"id":""}} -------------------------------------------------------------------------------- /docker/v2_demo/resources/waypoints/ac3a3b2d-07e8-4f25-92bc-98e7c92f7f1a: -------------------------------------------------------------------------------- 1 | { 2 | "name": "demo waypoint", 3 | "description": "", 4 | "feature": { 5 | "type": "Feature", 6 | "geometry": { 7 | "type": "Point", 8 | "coordinates": [ 9 | 23.455311064598344, 10 | 59.99716209068623 11 | ] 12 | }, 13 | "properties": {}, 14 | "id": "" 15 | } 16 | } 17 | 18 | -------------------------------------------------------------------------------- /docker/v2_demo/resources/waypoints/afe46290-aa98-4d2f-9c04-d199ca64942e: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lock", 3 | "description": "this is the lock", 4 | "feature": { 5 | "type": "Feature", 6 | "geometry": { 7 | "type": "Point", 8 | "coordinates": [ 9 | 23.435321561218167, 10 | 59.98480312764812 11 | ] 12 | }, 13 | "properties": {}, 14 | "id": "" 15 | }, 16 | "timestamp": "2022-04-21T18:23:19.815Z", 17 | "$source": "resources-provider" 18 | } -------------------------------------------------------------------------------- /docker/v2_demo/serverstate/course/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "activeRoute": { 3 | "href": "/resources/routes/ad825f6c-1ae9-4f76-abc4-df2866b14b78", 4 | "startTime": "2022-04-21T18:40:44.319Z", 5 | "pointIndex": 3, 6 | "pointTotal": 7, 7 | "reverse": true 8 | }, 9 | "nextPoint": { 10 | "href": null, 11 | "type": "RoutePoint", 12 | "position": { 13 | "latitude": 59.92852692137802, 14 | "longitude": 23.349311506736232 15 | }, 16 | "arrivalCircle": 500 17 | }, 18 | "previousPoint": { 19 | "href": null, 20 | "type": "RoutePoint", 21 | "position": { 22 | "longitude": 23.485033333333334, 23 | "latitude": 60.033516666666664 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /docker/v2_demo/startup_heroku_demo.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | service dbus restart 3 | /usr/sbin/avahi-daemon -k 4 | /usr/sbin/avahi-daemon --no-drop-root & 5 | /home/node/signalk/bin/signalk-server --sample-nmea0183-data 6 | -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Introduction 3 | --- 4 | 5 | # Introduction 6 | 7 | Signal K Server is software designed to be deployed on a vessel to act as a central hub which: 8 | 9 | 1. Collects data from devices and sensors on board 10 | 1. Aggregates and exposes it using the _[Signal K Data Standard](https://signalk.org/specification/latest/)_ 11 | 1. Exposes the collected data via REST APIs and websocket protocols over a standard WiFi, LAN or Internet connection. 12 | 13 | Through implementation of the _[Signal K Data Standard](https://signalk.org/specification/latest/)_, it enables data exchange between NMEA0183, NMEA2000 and other marine protocols facilitating two way communication between the various onboard systems. In addition it can also act as data hub for additional sensors ensuring their data appears within the single data model. _(Visit the [Signal K SensESP project](https://github.com/SignalK/SensESP) for [ESP32](https://en.wikipedia.org/wiki/ESP32) for details.)._ 14 | 15 | Data is made available to client applications / connections in JSON format making it widely accessible to Apps on phone / tablet devices and web applications. 16 | 17 | Signal K Server is also extensible, providing a plugin framework which allows developers to create solutions that integrate and extend its capabilities. These solutions can be published to **npmjs** and installed via the **App Store** in the server's web-based user interface. 18 | 19 | ![Server only setup](img/server_only.svg) 20 | -------------------------------------------------------------------------------- /docs/develop/plugins/publishing.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Publishing to The AppStore 3 | --- 4 | 5 | # Publishing to The AppStore 6 | 7 | Plugins and WebApps are available in the AppStore when they have been published to [npm repository](https://www.npmjs.com/) with the one or more of the following keywords in the `package.json` file: 8 | 9 | - `signalk-node-server-plugin` 10 | - `signalk-webapp` 11 | 12 | Additionally you can have your plugin appear within one or more AppStore categories by also adding the following keyword(s): 13 | 14 | - `signalk-category-chart-plotters` 15 | - `signalk-category-nmea-2000` 16 | - `signalk-category-nmea-0183` 17 | - `signalk-category-instruments` 18 | - `signalk-category-hardware` 19 | - `signalk-category-ais` 20 | - `signalk-category-notifications` 21 | - `signalk-category-digital-switching` 22 | - `signalk-category-utility` 23 | - `signalk-category-cloud` 24 | - `signalk-category-weather` 25 | - `signalk-category-deprecated` 26 | - `signalk-category-hidden` (won't show on the App Store) 27 | 28 | To have your plugin start automatically after being installed, without requiring any configuration via the **Plugin Config** screen add the following key to the `package.json` file: 29 | 30 | ```JSON 31 | "signalk-plugin-enabled-by-default": true 32 | ``` 33 | 34 | To control the way your WebApp is displayed in the Admin UI add a `signalk` key with the following attributes: 35 | 36 | ```JSON 37 | "signalk": { 38 | "appIcon": "./img/icon-72x72.png", // path to an image file to use as an icon. 39 | "displayName": "My SK App" // name to display in place of the package name. 40 | } 41 | ``` 42 | 43 | _Example: package.json_ 44 | 45 | ```JSON 46 | { 47 | "name": "my-signalk-plugin-app", 48 | "version": "1.0.0", 49 | "description": "My great signalk plugin-app", 50 | "keywords": [ 51 | "signalk-node-server-plugin", 52 | "signalk-webapp", 53 | "signalk-category-ais" 54 | ], 55 | "signalk-plugin-enabled-by-default": true, 56 | "signalk": { 57 | "appIcon": "./assets/icons/icon-72x72.png", 58 | "displayName": "My Great WebApp" 59 | }, 60 | "main": "plugin/index.js", 61 | "scripts": { 62 | "test": "echo \"Error: no test specified\" && exit 1" 63 | }, 64 | "author": "", 65 | "license": "ISC" 66 | } 67 | ``` 68 | 69 | #### Publishing your Plugin 70 | 71 | Once you have developed and tested your Plugin / WebApp you can publish it to make it visible in the AppStore. 72 | To do this, in a terminal session from within the folder containing `package.json`: 73 | 74 | ```shell 75 | npm publish 76 | ``` 77 | -------------------------------------------------------------------------------- /docs/develop/rest-api/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: REST APIs 3 | children: 4 | - course_api.md 5 | - course_calculations.md 6 | - resources_api.md 7 | - notifications_api.md 8 | - autopilot_api.md 9 | - anchor_api.md 10 | - plugin_api.md 11 | --- 12 | 13 | # REST APIs 14 | 15 | REST APIs were introduced in Signal K server version 2 to provide a way for applications and plugins perform operations and ensure that the Signal K data model is consistent. 16 | 17 | The OpenAPI definitions can be found under _Documentation -> OpenAPI_ in the server Admin UI. 18 | 19 | ### APIs available in Signal K server v2.0.0 and later: 20 | 21 | APIs are available via `/signalk/v2/api/` 22 | 23 | | API | Description | Endpoint | 24 | | --------------------------------- | ---------------------------------------------------------------------------------- | -------------------------------- | 25 | | [Course](./course_api.md) | Set a course, follow a route, advance to next point, etc. | `vessels/self/navigation/course` | 26 | | [Resources](./resources_api.md) | Create, view, update and delete waypoints, routes, etc. | `resources` | 27 | | [`Autopilot`](./autopilot_api.md) | Provide the ability to send common commands to an autopilot via a provider plugin. | `vessels/self/autopilot` | 28 | 29 | --- 30 | 31 | #### Following is a list of proposed APIs for implementation: 32 | 33 | | Proposed API | Description | Endpoint | 34 | | ----------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------- | 35 | | _[`Notifications`](notifications_api.md)_ | Provide the ability to raise, update and clear notifications from multiple sources. _[View PR](https://github.com/SignalK/signalk-server/pull/1560)_ | `notifications` | 36 | | _[`Anchor`](./anchor_api.md)_ | Provide endpoints to perform operations and facilitate an anchor alarm. | `vessels/self/navigation/anchor` | 37 | 38 | --- 39 | -------------------------------------------------------------------------------- /docs/develop/rest-api/anchor_api.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Anchor API 3 | --- 4 | 5 | # Anchor API 6 | 7 | #### (Proposed) 8 | 9 | _Note: The definition of this API is currently under development and the information provided here is likely to change._ 10 | 11 | The Signal K server Anchor API will define endpoints that can be implemented by plugins for the purposes of implementing and and operating an anchor alarm. 12 | 13 | A plugin that implements this API must ensure that all endpoints and operations comply with the definition to ensure applications making requests receive reliable and consistent results. 14 | 15 | The following HTTP requests are proposed: 16 | 17 | POST `/navigation/anchor/drop` (Commence lowering of anchor) 18 | 19 | POST `/navigation/anchor/radius` { value: number } (Set the radius of the alarm area) 20 | 21 | POST `/navigation/anchor/reposition` { rodeLength: number, anchorDepth: number } (Calculate anchor position) 22 | 23 | POST `/navigation/anchor/raise` (Commence raising the anchor) 24 | -------------------------------------------------------------------------------- /docs/develop/rest-api/notifications_api.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Notifications API 3 | --- 4 | 5 | # Notifications API 6 | 7 | #### (Under Development) 8 | 9 | _Note: This API is currently under development and the information provided here is likely to change._ 10 | 11 | The Signal K server Notifications API will provide a set of operations for raising, actioning and clearing notifications. 12 | 13 | It will implement: 14 | 15 | - Both HTTP endpoints for interactive use (`/signalk/v2/api/notifications`) and an interface for use by plugins and connection handlers to ensure effective management of notifications. 16 | 17 | - The ability to action notifications (e.g. acknowledge, silence, etc) and preserve the resulting status so it is available to all connected devices. 18 | 19 | - A unique `id` for each notification which can then be used to action it, regardless of the notification source. 20 | 21 | [View the PR](https://github.com/SignalK/signalk-server/pull/1560) for more details. 22 | -------------------------------------------------------------------------------- /docs/develop/rest-api/plugin_api.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Plugin API 3 | --- 4 | 5 | # Plugin configuration HTTP API 6 | 7 | ## `GET /plugins/` 8 | 9 | Get a list of installed plugins and their configuration data. 10 | 11 | ## `GET /plugins/` 12 | 13 | Get information from an installed plugin. 14 | 15 | Example result: 16 | 17 | ```json 18 | { 19 | "enabled": false, 20 | "id": "marinetrafficreporter", 21 | "name": "Marine Traffic Reporter" 22 | } 23 | ``` 24 | 25 | ## `POST /plugins//configure` 26 | 27 | Save configuration data for a plugin. Stops and starts the plugin as a side effect. 28 | -------------------------------------------------------------------------------- /docs/guides/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Guides 3 | children: 4 | - anchoralarm/anchoralarm.md 5 | - datalogging/datalogging.md 6 | - navdataserver/navdataserver.md 7 | --- 8 | 9 | # Signal K Server Guides 10 | 11 | These guides will help you understand and use various features of the Signal K server. Using the server for a specific use case often involves one or more plugins. 12 | 13 | - [Setting up an NMEA 0183 Navigation Data Server](navdataserver/navdataserver.md) - Learn how to set up Signal K as your boat's navigation data server 14 | - [Data Logging](datalogging/datalogging.md) - Configure and use Signal K's data logging capabilities 15 | - [Anchor Alarm](anchoralarm/anchoralarm.md) - Set up and use the anchor alarm feature 16 | 17 | For questions and support see [Signal K Discussions](https://github.com/SignalK/signalk/discussions) or join [Signal K Discord](https://discord.gg/uuZrwz4dCS). 18 | -------------------------------------------------------------------------------- /docs/guides/anchoralarm/alarmsilencer.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SignalK/signalk-server/4e95c90933fdbdb768f4086ffbe0babce459a093/docs/guides/anchoralarm/alarmsilencer.jpg -------------------------------------------------------------------------------- /docs/guides/anchoralarm/anchor_alarm_plugin_ui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SignalK/signalk-server/4e95c90933fdbdb768f4086ffbe0babce459a093/docs/guides/anchoralarm/anchor_alarm_plugin_ui.png -------------------------------------------------------------------------------- /docs/guides/anchoralarm/anchoralarmplugin.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SignalK/signalk-server/4e95c90933fdbdb768f4086ffbe0babce459a093/docs/guides/anchoralarm/anchoralarmplugin.jpg -------------------------------------------------------------------------------- /docs/guides/anchoralarm/appstore_available.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SignalK/signalk-server/4e95c90933fdbdb768f4086ffbe0babce459a093/docs/guides/anchoralarm/appstore_available.png -------------------------------------------------------------------------------- /docs/guides/anchoralarm/connections.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SignalK/signalk-server/4e95c90933fdbdb768f4086ffbe0babce459a093/docs/guides/anchoralarm/connections.jpg -------------------------------------------------------------------------------- /docs/guides/anchoralarm/freeboardsk_anchor_alarm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SignalK/signalk-server/4e95c90933fdbdb768f4086ffbe0babce459a093/docs/guides/anchoralarm/freeboardsk_anchor_alarm.png -------------------------------------------------------------------------------- /docs/guides/anchoralarm/freeboardsk_anchor_watch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SignalK/signalk-server/4e95c90933fdbdb768f4086ffbe0babce459a093/docs/guides/anchoralarm/freeboardsk_anchor_watch.png -------------------------------------------------------------------------------- /docs/guides/anchoralarm/mfd_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SignalK/signalk-server/4e95c90933fdbdb768f4086ffbe0babce459a093/docs/guides/anchoralarm/mfd_notification.png -------------------------------------------------------------------------------- /docs/guides/anchoralarm/pushnotificationplugin.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SignalK/signalk-server/4e95c90933fdbdb768f4086ffbe0babce459a093/docs/guides/anchoralarm/pushnotificationplugin.jpg -------------------------------------------------------------------------------- /docs/guides/anchoralarm/tracks.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SignalK/signalk-server/4e95c90933fdbdb768f4086ffbe0babce459a093/docs/guides/anchoralarm/tracks.jpg -------------------------------------------------------------------------------- /docs/guides/anchoralarm/vesseldata.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SignalK/signalk-server/4e95c90933fdbdb768f4086ffbe0babce459a093/docs/guides/anchoralarm/vesseldata.png -------------------------------------------------------------------------------- /docs/guides/anchoralarm/wsk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SignalK/signalk-server/4e95c90933fdbdb768f4086ffbe0babce459a093/docs/guides/anchoralarm/wsk.png -------------------------------------------------------------------------------- /docs/guides/anchoralarm/wsk_connection.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SignalK/signalk-server/4e95c90933fdbdb768f4086ffbe0babce459a093/docs/guides/anchoralarm/wsk_connection.jpg -------------------------------------------------------------------------------- /docs/guides/anchoralarm/wsk_connections.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SignalK/signalk-server/4e95c90933fdbdb768f4086ffbe0babce459a093/docs/guides/anchoralarm/wsk_connections.jpg -------------------------------------------------------------------------------- /docs/guides/anchoralarm/wsk_error.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SignalK/signalk-server/4e95c90933fdbdb768f4086ffbe0babce459a093/docs/guides/anchoralarm/wsk_error.jpg -------------------------------------------------------------------------------- /docs/guides/anchoralarm/wsk_ios.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SignalK/signalk-server/4e95c90933fdbdb768f4086ffbe0babce459a093/docs/guides/anchoralarm/wsk_ios.jpg -------------------------------------------------------------------------------- /docs/guides/anchoralarm/wsk_notifications.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SignalK/signalk-server/4e95c90933fdbdb768f4086ffbe0babce459a093/docs/guides/anchoralarm/wsk_notifications.jpg -------------------------------------------------------------------------------- /docs/guides/anchoralarm/wsk_phone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SignalK/signalk-server/4e95c90933fdbdb768f4086ffbe0babce459a093/docs/guides/anchoralarm/wsk_phone.png -------------------------------------------------------------------------------- /docs/guides/anchoralarm/wsk_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SignalK/signalk-server/4e95c90933fdbdb768f4086ffbe0babce459a093/docs/guides/anchoralarm/wsk_screen.png -------------------------------------------------------------------------------- /docs/guides/datalogging/datalogging.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Data Logging 3 | --- 4 | 5 | # Data Logging 6 | 7 | Signal K server can log all input data from the configured input connections into hourly data log files. 8 | 9 | You can activate data logging for each connection by switching on Data Logging under Server / Data Connections, saving the connection settings. The setting takes effect after restarting the server. 10 | 11 | The log files are downloadable in the Admin UI under Server / Server Logs. 12 | 13 | The logs contain the data that the server has processed in the raw, original format (prior to conversion to Signal K) and each message is timestamped. 14 | 15 | Log files can be used for archiving, to later play back the data or for debugging purposes. The server can play them back by creating a Data Connection with Data Type `File Stream` and secondary Data Type as `Multiplexed Log`. 16 | -------------------------------------------------------------------------------- /docs/guides/navdataserver/enable0183.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SignalK/signalk-server/4e95c90933fdbdb768f4086ffbe0babce459a093/docs/guides/navdataserver/enable0183.png -------------------------------------------------------------------------------- /docs/guides/navdataserver/n2kais2nmea0183.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SignalK/signalk-server/4e95c90933fdbdb768f4086ffbe0babce459a093/docs/guides/navdataserver/n2kais2nmea0183.png -------------------------------------------------------------------------------- /docs/guides/navdataserver/navionics.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SignalK/signalk-server/4e95c90933fdbdb768f4086ffbe0babce459a093/docs/guides/navdataserver/navionics.png -------------------------------------------------------------------------------- /docs/guides/navdataserver/sk2nmea0183.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SignalK/signalk-server/4e95c90933fdbdb768f4086ffbe0babce459a093/docs/guides/navdataserver/sk2nmea0183.png -------------------------------------------------------------------------------- /docs/guides/navdataserver/vesseldata.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SignalK/signalk-server/4e95c90933fdbdb768f4086ffbe0babce459a093/docs/guides/navdataserver/vesseldata.png -------------------------------------------------------------------------------- /docs/img/autopilot_provider.dia: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SignalK/signalk-server/4e95c90933fdbdb768f4086ffbe0babce459a093/docs/img/autopilot_provider.dia -------------------------------------------------------------------------------- /docs/img/calibration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SignalK/signalk-server/4e95c90933fdbdb768f4086ffbe0babce459a093/docs/img/calibration.png -------------------------------------------------------------------------------- /docs/img/course_provider.dia: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SignalK/signalk-server/4e95c90933fdbdb768f4086ffbe0babce459a093/docs/img/course_provider.dia -------------------------------------------------------------------------------- /docs/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SignalK/signalk-server/4e95c90933fdbdb768f4086ffbe0babce459a093/docs/img/logo.png -------------------------------------------------------------------------------- /docs/img/resource_provider.dia: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SignalK/signalk-server/4e95c90933fdbdb768f4086ffbe0babce459a093/docs/img/resource_provider.dia -------------------------------------------------------------------------------- /docs/img/server_only.dia: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SignalK/signalk-server/4e95c90933fdbdb768f4086ffbe0babce459a093/docs/img/server_only.dia -------------------------------------------------------------------------------- /docs/img/server_update.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SignalK/signalk-server/4e95c90933fdbdb768f4086ffbe0babce459a093/docs/img/server_update.png -------------------------------------------------------------------------------- /docs/img/vesselpositions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SignalK/signalk-server/4e95c90933fdbdb768f4086ffbe0babce459a093/docs/img/vesselpositions.png -------------------------------------------------------------------------------- /docs/setup/SK_file_stream_N2K.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SignalK/signalk-server/4e95c90933fdbdb768f4086ffbe0babce459a093/docs/setup/SK_file_stream_N2K.png -------------------------------------------------------------------------------- /docs/setup/generating_tokens.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Generating Tokens 3 | --- 4 | 5 | # Generating Tokens 6 | 7 | For a device to be able to interact with a Signal K server with security enabled, it is require to pass an access token with each request. 8 | 9 | _Examples include display / gauge, temperature sensor or client with no user interface._ 10 | 11 | To get an access token the following methods can be used: 12 | 13 | 1. The device can submit an [Access Request](https://signalk.org/specification/1.5.0/doc/access_requests.html) which needs to be actioned via the Signal K Server UI. 14 | 2. Generate a token against a user account that has been configured on the Signal K Server. 15 | 16 | ### Generate Token 17 | 18 | To generate a token against a user account that has been configured on the Signal K Server use the `signalk-generate-token` utility. 19 | 20 | The `signalk-generate-token` utility is run from a terminal session on the Signal K Server and accepts the following parameters: 21 | 22 | - `-u `: The user account against which the token is created. 23 | - `-e