SolarNodeOS - SolarNetwork/solarnetwork GitHub Wiki

SolarNodeOS - The SolarNode Operating System

SolarNodeOS is a Debian-based operating system tailored specifically for SolarNode devices. SolarNetwork Foundation hosts a Debian package repository at https://debian.repo.solarnetwork.org.nz/ and a testing/bleeding-edge repository at https://debian.repo.stage.solarnetwork.org.nz/ that contains many packages designed to make using SolarNode easier.

You can get pre-built SolarNodeOS images for various devices (like Raspberry Pi) that come with the core set of SolarNodeOS packages already installed, and have the package repository already configured so you can easily install additional SolarNodeOS packages as needed.

Packages can be installed in the SolarNode UI by visiting the System > Packages page:

SolarNode package management UI

You can also use the standard Debian CLI tools (for example apt) to manage these packages:

# install the BACnet data source
sudo apt install solarnode-app-bacnet

Package Groups

The following package groups are available in SolarNodeOS:

Group Description
Application Packages SolarNode application packages. Generally these are the packages of most interest to users directly.
Application I/O Packages SolarNode application input/output support packages.
Platform Packages SolarNode runtime platform packages. These are typically pulled in automatically by application packages.
System Packages Supporting system packages.
Developer Packages Development/testing packages.

Application Packages

The following packages make up the SolarNode application and provide user-visible features like data sources, filters, and other services. Not all packages are required for a basic SolarNode. In general these packages install SolarNode plugins into the /var/lib/solarnode/app/main directory.

🔥 Looking for a plugin that is not currently supported in an application package? Reach out to see if we can help with that! It could just be that an existing SolarNode plugin has not has a package created for it yet.

Package Description
solarnode-app-bacnet BACnet data source and control 🔗
solarnode-app-camera-ffmpeg Capture camera images using ffmpeg 🔗
solarnode-app-control-core Core SolarNode control support.
solarnode-app-core Core SolarNode application 🔗
solarnode-app-datumfilters Various datum filters 🔗
solarnode-app-datumfilters-pvlib pvlib datum filters 🔗
solarnode-app-db-derby Local database persistence using the Derby Database 🔗
solarnode-app-db-h2 Local database persistence using the H2 Database 🔗
solarnode-app-db-h2-nonvolatile Local database persistence using the H2 Database (non-volatile storage) 🔗
solarnode-app-deson Deson meter data source 🔗
solarnode-app-enasolar EnaSolar inverter data source 🔗
solarnode-app-loxone Loxone Miniserver data source 🔗
solarnode-app-mbus M-Bus data source 🔗
solarnode-app-metrics-db-jdbc Metric persistence 🔗
solarnode-app-metrics-harvester Metric Harvester datum filter 🔗
solarnode-app-modbus Modbus data source and control 🔗
solarnode-app-osstat OS statistics data source 🔗
solarnode-app-price-nz-grid New Zealand electricity grid market price data source 🔗
solarnode-app-protobuf Protobuf support 🔗
solarnode-app-setup-wifi WiFi setup support 🔗
solarnode-app-sma SMA data sources 🔗
solarnode-app-solarflux SolarFlux integration 🔗
solarnode-app-solcast Solcast atmospheric data source 🔗
solarnode-app-stomp-setup STOMP setup server 🔗
solarnode-app-storage-s3 App storage to S3 🔗
solarnode-app-storage-upload App storage resource upload 🔗
solarnode-app-sunspec SunSpec data source 🔗
solarnode-app-tou Time-of-use tariff data source 🔗
solarnode-app-weatherflow-tempest WeatherFlow Tempest data source 🔗

solarnode-app-bacnet

Provides BACnet data source and control plugins. BACnet is a popular protocol in building automation and control systems.

Plugin Name Plugin ID
BACnet Control net.solarnetwork.node.control.bacnet

solarnode-app-camera-ffmpeg

Provides a camera image control plugin using the ffmpeg library.

Plugin Name Plugin ID
Camera Control via FFmpeg net.solarnetwork.node.control.camera.ffmpeg

solarnode-app-control-core

Provide some core control-related support plugins.

Plugin Name Plugin ID
Control Datum Source net.solarnetwork.node.datum.control
Operational Mode Controller net.solarnetwork.node.control.opmode

solarnode-app-core

Provides the core SolarNode application, which consists of a set of SolarNode plugins that most every SolarNode device needs.

solarnode-app-datumfilters

Provides various standard datum filter plugins, which provide ways to manipulate datum generated by SolarNode data sources before posting them to SolarNetwork.

Plugin Name Plugin ID
Datum Filters (Standard) net.solarnetwork.node.datum.filter.standard
Tariff Datum Filter net.solarnetwork.node.datum.filter.tariff

solarnode-app-datumfilters-pvlib

Provides pvlib datum filter plugins, for example to calcualte POA irradiance from GHI irradiance.

Plugin Name Plugin ID
pvlib Datum Filter net.solarnetwork.node.datum.filter.pvlib

solarnode-app-db-derby

Provides local persistence using the Derby Database. This package can be replaced by the the solarnode-app-db-h2 package to use the H2 Database instead.

solarnode-app-db-h2

Provides local persistence using the H2 Database. This package can be replaced by the solarnode-app-db-derby package to use the Derby Database instead. It can also be replaced by the solarnode-app-db-h2-nonvolatile package.

solarnode-app-db-h2-nonvolatile

Provides an H2 database for SolarNode that lives directly on non-volatile storage, instead of the default method of storing the database in RAM. This can be useful on devices with smaller amounts of RAM, at the expense of more wear to the persistent storage medium.

This package can be replaced by the solarnode-app-db-derby package to use the Derby Database instead, or the solarnode-app-db-h2 package for RAM-based storage.

solarnode-app-deson

Provides a data source plugin for Deson SDM power meters.

Plugin Name Plugin ID
Deson Electric Hardware Support net.solarnetwork.node.hw.deson
Deson Electric SDM Power Meter net.solarnetwork.node.datum.deson.sdm

solarnode-app-enasolar

Provides a data source plugin for EnaSolar inverters.

Plugin Name Plugin ID
EnaSolar Power Datum DataSource net.solarnetwork.node.datum.enasolar.ws

solarnode-app-loxone

Provides a data source plugin for Loxone Miniserver integration, along with a custom integration management UI.

Plugin Name Plugin ID
Loxone Miniserver net.solarnetwork.node.hw.loxone
Loxone Setup Web App net.solarnetwork.node.setup.web.loxone

solarnode-app-mbus

Provides a data source plugin for wired and wireless M-Bus devices.

Plugin Name Plugin ID
M-Bus Datum Source net.solarnetwork.node.datum.mbus

solarnode-app-metrics-db-jdbc

Provides database persistence for metrics.

Plugin Name Plugin ID
Metrics DAO (JDBC) net.solarnetwork.node.metrics.dao.jdbc

solarnode-app-metrics-harvester

Provides a datum filter for collecting metrics from datum data source plugins.

Plugin Name Plugin ID
Metrics Harvester net.solarnetwork.node.metrics.harvester

solarnode-app-modbus

Provides data source and control plugins for Modbus devices.

Plugin Name Plugin ID
Modbus Control net.solarnetwork.node.control.modbus
Modbus Datum Source net.solarnetwork.node.datum.modbus

solarnode-app-osstat

Provides a data source for OS statistics (like uptime, CPU use, RAM use, network use).

Plugin Name Plugin ID
OS Statistics Data Source net.solarnetwork.node.datum.os.stat

solarnode-app-price-nz-grid

Provides a data source for New Zealand electricity grid market prices.

Plugin Name Plugin ID
New Zealand Grid Market Prices net.solarnetwork.node.datum.price.nz.wits

solarnode-app-protobuf

Provides the Protobuf library, the SolarNetwork Protobuf API, SolarNetwork JDT Compiler Service, and SolarNode Protobuf I/O plugins.

solarnode-app-setup-wifi

Provides a WiFi network connection management UI.

Plugin Name Plugin ID
WiFi Setup net.solarnetwork.node.setup.wifi

solarnode-app-sma

Provides data source plugins for various SMA inverters and devices.

Plugin Name Plugin ID
SMA Core Support net.solarnetwork.node.hw.sma
SMA Power Datum DataSource (yasdi4j) net.solarnetwork.node.datum.sma.yasdi4j
SMA WebBox Data Source net.solarnetwork.node.datum.sma.webbox
SMA yasdi4j n.s.external.yasdi4j
SMA yasdi4j Support net.solarnetwork.node.io.yasdi4j

solarnode-app-solarflux

Provides integration with SolarFlux, for real-time SolarNode data observation.

Plugin Name Plugin ID
SolarFlux Upload net.solarnetwork.node.upload.flux

solarnode-app-solcast

Provides support for collecting atmospheric data from the Solcast API.

Plugin Name Plugin ID
Solcast Datum Source net.solarnetwork.node.datum.solcast

solarnode-app-stomp-setup

Provides a STOMP-based setup server in SolarNode.

solarnode-app-storage-s3

Provides support for SolarNode to store resources in S3, such as images captured from a camera.

Plugin Name Plugin ID
S3 Storage Support net.solarnetwork.node.io.s3

solarnode-app-storage-upload

Provides support for uploading files to a SolarNode Resource Storage Service, such as provided by the S3 Storage Service package.

Plugin Name Plugin ID
Storage Service Upload net.solarnetwork.node.upload.resource

solarnode-app-sunspec

Provides various SunSpec Modbus data sources, to collect data from SunSpec-compliant inverters, meters, and more.

Plugin Name Plugin ID
SunSpec Environmental Data Source net.solarnetwork.node.datum.sunspec.environmental
SunSpec Inverter Data Source net.solarnetwork.node.datum.sunspec.inverter
SunSpec Power Meter Data Source net.solarnetwork.node.datum.sunspec.meter
SunSpec Support net.solarnetwork.node.hw.sunspec

solarnode-app-tou

Provides a time-of-use tariff data source.

Plugin Name Plugin ID
Time of Use Datum Source net.solarnetwork.node.datum.tou

solarnode-app-weatherflow-tempest

Provides a Weatherflow Tempest data source to collect weather station data.

Plugin Name Plugin ID
WeatherFlow Tempest Datum Source net.solarnetwork.node.datum.weather.weatherflow.tempest

Application I/O Packages

The following packages add supporting input/output protocol support to the SolarNode application. These are often automatically installed when other application packages are installed. In general these packages install SolarNode plugins into the /var/lib/solarnode/app/main directory.

Package Description
solarnode-app-io-bacnet SolarNode BACnet API 🔗
solarnode-app-io-bacnet-bacnet4j BACnet4J implementation of the SolarNode BACnet API 🔗
solarnode-app-io-http HTTP Support 🔗
solarnode-app-io-mbus SolarNode M-Bus API 🔗
solarnode-app-io-mbus-jmbus-jrxtx jMBus + jRXTX implementation of the SolarNode M-Bus API 🔗
solarnode-app-io-modbus SolarNode Modbus API 🔗
solarnode-app-io-modbus-jamod-pjc Jamod + PureJavaComm implementation of the SolarNode Modbus API 🔗
solarnode-app-io-modbus-jamod-rxtx Jamod + RxTx implementation of the SolarNode Modbus API 🔗
solarnode-app-io-modbus-nifty-jsc Nifty Modbus + jSerialComm implementation of the SolarNode Modbus API 🔗
solarnode-app-io-modbus-nifty-pjc Nifty Modbus + PureJavaComm implementation of the SolarNode Modbus API 🔗
solarnode-app-io-modbus-server TCP Modbus server 🔗
solarnode-app-io-mqtt SolarNetwork MQTT API 🔗
solarnode-app-io-mqtt-netty Netty implementation of the SolarNetwork MQTT API 🔗
solarnode-app-io-serial SolarNode Serial API 🔗
solarnode-app-io-serial-jsc jSerialComm implementation of the SolarNode Serial API 🔗
solarnode-app-io-serial-pjc PureJavaComm implementation of the SolarNode Serial API 🔗
solarnode-app-io-serial-rxtx RxTx implementation of the SolarNode Serial API 🔗

solarnode-app-io-bacnet

Provides the SolarNode BACnet API to SolarNode.

📎 An implementation package of this API is also required; see solarnode-app-io-bacnet-bacnet4j.

solarnode-app-io-bacnet-bacnet4j

Provides a BACnet4J implementation of the SolarNode BACnet API.

solarnode-app-io-http

Provides general HTTP client support through the HTTP Support plugin.

solarnode-app-io-mbus

Provides the SolarNode M-Bus API to SolarNode.

solarnode-app-io-mbus-jmbus-jrxtx

Provides a jMBus implementation of the SolarNode M-Bus API using the jRXTX library for serial communication.

solarnode-app-io-modbus

Provides the SolarNode Modbus API to SolarNode.

📎 An implementation package of this API is also required; see solarnode-app-io-modbus-nifty-jsc.

solarnode-app-io-modbus-jamod-pjc

Provides a Jamod implementation of the SolarNode Modbus API using the PureJavaComm library for serial communication.

⚠️ The solarnode-app-io-modbus-nifty-jsc package is the recommended Modbus implementation to use for new SolarNode deployments.

solarnode-app-io-modbus-jamod-rxtx

Provides a Jamod implementation of the SolarNode Modbus API using the RxTx library for serial communication.

⚠️ The solarnode-app-io-modbus-nifty-jsc package is the recommended Modbus implementation to use for new SolarNode deployments.

solarnode-app-io-modbus-nifty-jsc

Provides a Nifty Modbus implementation of the SolarNode Modbus API using the jSerialComm library for serial communication.

solarnode-app-io-modbus-nifty-pjc

Provides a Nifty Modbus implementation of the SolarNode Modbus API using the PureJavaComm library for serial communication.

⚠️ The solarnode-app-io-modbus-nifty-jsc package is the recommended Modbus implementation to use for new SolarNode deployments.

solarnode-app-io-modbus-server

Provides a TCP Modbus server based on Nifty Modbus. The server is populated by datum properties collected by any SolarNode datum data source plugin.

solarnode-app-io-mqtt

Provides the SolarNetwork MQTT API to SolarNode.

📎 An implementation package of this API is also required; see solarnode-app-io-mqtt-netty.

solarnode-app-io-mqtt-netty

Provides a Netty implementation of the SolarNetwork MQTT API.

solarnode-app-io-serial

Provides the SolarNode Serial API to SolarNode.

📎 An implementation package of this API is also required; see solarnode-app-io-serial-jsc.

solarnode-app-io-serial-jsc

This provides a jSerialComm implementation of the SolarNode Serial API.

solarnode-app-io-serial-pjc

This provides a PureJavaComm implementation of the SolarNode Serial API.

⚠️ The solarnode-app-io-serial-jsc package is the recommended Serial implementation to use for new SolarNode deployments.

solarnode-app-io-serial-rxtx

This provides a RxTx implementation of the SolarNode Serial API.

⚠️ The solarnode-app-io-serial-jsc package is the recommended Serial implementation to use for new SolarNode deployments.

Platform Packages

The following packages make up the base platform (OSGi runtime environment) that the SolarNode application runs within.

Package Description
solarnode-base The base SolarNode runtime platform. 🔗
solarnode-base-aws Adds AWS integration to the platform. 🔗
solarnode-base-blueprint-gemini Adds OSGi Blueprint to the platform. 🔗
solarnode-base-bouncy-castle Adds the Bouncy Castle cryptogrphic library to the platform. 🔗
solarnode-base-commons-lang3 Adds Apache Commons Lang3 to the platform. 🔗
solarnode-base-console Adds an OSGi console shell to the platform. 🔗
solarnode-base-derby Adds Derby Database to the platform (deprecated). 🔗
solarnode-base-h2 Adds H2 Database to the platform. 🔗
solarnode-base-httpclient Adds Apache HttpClient to the platform. 🔗
solarnode-base-jackson Adds Jackson JSON to the platform. 🔗
solarnode-base-jamod-pjc Adds Jamod modbus (PureJavaComm) to the platform. 🔗
solarnode-base-jamod-rxtx Adds Jamod modbus (RXTX) to the platform. 🔗
solarnode-base-java11 Adds Java 11 support to the platform. 🔗
solarnode-base-java17 Adds Java 17 support to the platform. 🔗
solarnode-base-jaxb Adds JAXB support to the platform. [:link:](https://github.com/SolarNetwork/solarnode-os-packages/tree/develop/solarnode-base-jaxb /debian)
solarnode-base-jmbus-jrxtx Adds jMBus M-Bus (jRXTX) to the platform. 🔗
solarnode-base-jserialcomm Adds jSerialComm serial port suport to the platform. 🔗
solarnode-base-log4j2 Adds Apache Log4j2 support to the platform. 🔗
solarnode-base-log4j2-extra Adds support for publishing logs to EventAdmin. 🔗
solarnode-base-netty Adds Netty to the platform. 🔗
solarnode-base-nifty-modbus-jsc Adds Nifty Modbus (jSerialComm) to the platform. 🔗
solarnode-base-nifty-modbus-pjc Adds Nifty Modbus (PureJavaComm) to the platform. 🔗
solarnode-base-purejavacomm Adds PureJavaComm serial port support to the platform. 🔗
solarnode-base-reactive-streams Adds Reactive Streams to the platform. 🔗
solarnode-base-scribejava Adds OAuth support to the platform. 🔗
solarnode-base-slf4j Adds SLF4J support to the platform. 🔗
solarnode-base-spring Adds Spring Framework to the platform. 🔗
solarnode-base-spring-security Adds Spring Security to the platform. 🔗
solarnode-base-tiles Adds Apache Tiles to the platform. 🔗
solarnode-base-xalan Adds Apache Xalan to the platform. 🔗

solarnode-base

This package contains the base SolarNode runtime platform. It contains the solarnode service that starts/stops the runtime. This package is typically installed along with with the solarnode-app-core package to provide a full SolarNode application.

The platform is organised into the following directories:

Directory Description
/etc/solarnode The main runtime configuration directory.
/usr/share/solarnode/app The main runtime platform.
/usr/share/solarnode/bin Helper scripts and shell functions.
/var/lib/solarnode The SolarNode runtime "home" directory.

The integrated shell functions provide several utilities:

Function Description
sn-ctl Shortcut for managing the SolarNode service. Pass the service command as an argument, for example sn-ctl restart to restart SolarNode.
sn-home Prints out the SolarNode home path.
sn-log-path Prints out the path to the main SolarNode log file.
sn-log-tail Runs the tail command on the SolarNode log file.
sn-restart Restart the SolarNode service.
sn-start Start the SolarNode service.
sn-status Print out status on the SolarNode service.
sn-stop Stop the SolarNode service.

solarnode-base-aws

Adds a subset of the AWS SDK to the SolarNode platform.

solarnode-base-blueprint-gemini

Adds the Eclipse Gemini implementation of OSGi Blueprint to the SolarNode platform.

solarnode-base-bouncy-castle

Adds the Bouncy Castle cryptograpahic library to the SolarNode platform.

solarnode-base-commons-lang3

Adds Apache Commons Lang3 to the SolarNode platform.

solarnode-base-console

Adds an OSGi telnet console shell to the SolarNode platform.

solarnode-base-derby

Adds Derby Database to the SolarNode platform.

⚠️ This package has been replaced by the solarnode-base-h2 package.

solarnode-base-h2

Adds H2 Database to the SolarNode platform.

solarnode-base-h2

Adds the Apache HttpClient to the SolarNode platform.

solarnode-base-jackson

Adds Jackson JSON to the SolarNode platform.

solarnode-base-jamod-pjc

Adds Jamod modbus to the SolarNode platform. Uses PureJavaComm for RTU serial modbus.

solarnode-base-jamod-rxtx

Adds Jamod modbus to the SolarNode platform. Uses RXTX for RTU serial modbus.

solarnode-base-jmbus-jrxtx

Adds jMBus M-Bus support to the SolarNode platform. Uses the jRXTX library for serial port support.

solarnode-base-java11

Adds Java 11 specific runtime configuration to the SolarNode platform.

solarnode-base-java17

Adds Java 17 specific runtime configuration to the SolarNode platform.

solarnode-base-jaxb

Adds Java Architecture for XML Binding support to the SolarNode platform.

solarnode-base-jserialcomm

Adds jSerialComm serial port support to the SolarNode platform.

solarnode-base-log4j2

Adds Apache log4j2 to the SolarNode platform.

solarnode-base-log4j2-extra

Adds support for the EventAdmin Appender for publishing logs to the the platform EventAdmin service, so log messages can then be processed by SolarNode plugins, such as publishing them as a datum stream to SolarFlux.

solarnode-base-netty

Adds Netty to the SolarNode platform.

solarnode-base-nifty-modbus-jsc

Adds Nifty Modbus to the SolarNode platform. Uses jSerialComm for RTU serial modbus.

solarnode-base-nifty-modbus-pjc

Adds Nifty Modbus to the SolarNode platform. Uses PureJavaComm for RTU serial modbus.

solarnode-base-purejavacomm

Adds PureJavaComm serial port support to the SolarNode platform.

solarnode-base-reactive-streams

Adds Reactive Streams to the SolarNode platform.

solarnode-base-scribejava

Adds OAuth support through ScribeJava to the SolarNode platform.

solarnode-base-slf4j

Adds Simple Logging Facade for Java to the SolarNode platform.

solarnode-base-spring

Adds Spring Framework to the SolarNode platform.

solarnode-base-spring-security

Adds Spring Security to the SolarNode platform.

solarnode-base-tiles

Adds Apache Tiles to the SolarNode platform.

solarnode-base-xalan

Adds Apache Xalan XSLT support to the SolarNode platform.

System Packages

The following packages provide system support to the SolarNode application:

Package Description
libmodbus Shared library for Modbus communcation 🔗
opendnp3 Shared library for DNP3 communication 🔗
sn-heartbeat-log Audit SolarNode update with a simple date log 🔗
sn-i2c I2C hardware support 🔗
sn-iptables Firewall management service using iptables 🔗
sn-mbpoll Utility for communicating with Modbus devices 🔗
sn-motion Support for integrating with the motion service 🔗
sn-nftables Firewall management service using nftables 🔗
sn-osstat SolarNode OS statistics support 🔗
sn-pi Raspberry Pi support 🔗
sn-pi-bluetooth Bluetooth support on Raspberry Pi devices 🔗
sn-pi-can-mcp2515 Raspberry Pi MCP2515 CAN HAT support 🔗
sn-pi-mobile-shield-quectel Raspberry Pi Mobile Shield (Quectel) 🔗
sn-pi-usb-support Raspberry Pi USB support 🔗
sn-pvlib pvlib support 🔗
sn-rfid-reader-tools RFID reader support 🔗
sn-rxtx SolarNode Java serial port support 🔗
sn-socketcand The socketcand server 🔗
sn-solarbackup SolarNode backup support 🔗
sn-solarpkg SolarNode package management support 🔗
sn-solarssh SolarSSH support (remote management) 🔗
sn-system Core SolarNode system support 🔗
sn-wifi WiFi networking support 🔗
websocat The websocat utility 🔗
yasdi Interactive shell for SMA inverters using libyasdi 🔗
yasdi4j The yasdi4j library 🔗

libmodbus

This is a Debian package of the libmodbus library. A libmodbus-dev package is also available that provides the development header files.

opendnp3

This is a Debian package of the OpenDNP3 library. It includes the libopendnp3java Java native shared library. The opendnp3-dev package is also available that provides the OpenDNP3 development header files.

This package also provides a way to open a port in the firewall, so the OpenDNP3 application can be reached from outside the node if needed. Just run dpkg-reconfigure opendnp3 to configure.

sn-heartbeat-log

Provides an up-time date log for auditing purposes.

sn-i2c

Provides I2C support.

sn-iptables

Provides a basic filewall configuration using the iptables package filter available in Debian 9 or earlier systems. For Debian 10 or later systems see the sn-nftables package. The firewall rules are maintained in /etc/iptables/iptables.rules, which are loaded at system boot time via sn-iptables.service. Port 22 is open to allow for SSH access. Ports 80 and 8080 are open to allow for the SolarNode Setup web application.

A basic SSH brute-force mitigation script is integrated into the firewall configuration. A periodic job is scheduled to run via /etc/cron.d/drop-brute, which invokes the /usr/share/solarnode/bin/drop-brute.sh script.

sn-mbpoll

This is a Debian package of the mbpoll utility, which provides the mbpoll command for communicating with Modbus devices.

sn-motion

This package supports the motion service by providing a sn-motion-cleaner periodic job that runs to clean out old media files captured by motion. The /etc/default/sn-motion file configures how many days of media should be retained. The /usr/share/solarnode/bin/clean-motion-oldmedia.sh script is then executed by the sn-motion-cleaner service to remove files older than the configured threshold.

sn-nftables

Provides a basic filewall configuration using the nftables package filter available in Debian 10 or later systems. For Debian 9 or earlier systems see the sn-iptables package. The firewall rules are maintained in /etc/nftables.conf, which are loaded at system boot time via nftables.service. Port 22 is open to allow for SSH access. Ports 80 and 8080 are open to allow for the SolarNode Setup web application.

A basic SSH brute-force mitigation script is integrated into the firewall configuration. A periodic job is scheduled to run via /etc/cron.d/nftables-drop-brute, which invokes the /usr/share/solarnode/bin/nftables-drop-brute.sh script.

This package also provides the /usr/share/solarnode/bin/nft-firewall.sh script to help manage the firewall.

sn-osstat

This package contains the /usr/share/solarnode/bin/solarstat.sh script, which can be used to collect OS statistics as SolarNetwork datum via the SolarNode OS Statistics Datum Source plugin.

sn-pi

Provides some Raspberry Pi-specific configuration.

First, the hardware watchdog is enabled in /boot/config.txt, and configured to restart the device after 14 seconds of no response from the operating system.

Second, it provides a sn-osstat statistic plugin for cpu-temp so that the CPU temperature can be collected.

Third, it configures some udev rules in /etc/modprobe.d and sysctl configuration in /etc/sysctl.d that have been adapted from Raspbian but don't require pulling in all the various package dependencies the Raspbian versions require.

sn-pi-bluetooth

Provides scripts used to enable Bluetooth support on Raspberry Pi devices. It has been adapted from the RPi-Distro/pi-bluetooth package, to remove the dependency on the raspberrypi-sys-mods package.

sn-pi-can-mcp2515

Provides configuration and support for MCP2515 based CAN HATs. The goal of this package is to configure the CAN HAT for use by SolarNode on a Raspberry Pi.

sn-pi-mobile-shield-quectel

This package configuration and support for Quectel-based 3/4G shields. The goal of this package is to configure, start, and maintain a mobile network connection on the shield's modem.

sn-pi-usb-support

Provides support for USB devices on Raspberry Pi devices.

sn-pvlib

Provides pvlib and supporting scripts.

sn-rfid-reader-tools

Provides the sn-rfid-reader and sn-rfid-server tools, and a sn-rfid-server@ service to manage a sn-rfid-server daemon per connected RFID reader. These tools are used by the RFID Reader SolarNode plugin to integrate with RFID readers. Note that this package does not install the udev rules shown at that link: appropriate rules should be installed manually based on your specific needs.

sn-rxtx

This package manages a symbolic link in the JRE lib/ext directory to the RXTXcomm.jar file included with the librxtx-java package, so that the SolarNode application can use serial ports on the device.

sn-socketcand

Provides the socketcand server.

sn-solarbackup

This package contains scripts to support OS-level backups in SolarNode. The SolarNode External Backup Provider plugin works with this package to integrate the backups into SolarNode.

This package

sn-solarpkg

Provides the /usr/share/solarnode/bin/solarpkg.sh script, which provides support for SolarNode to download/install OS packages.

sn-solarssh

Provides support for the SolarSSH remote management service hosted by SolarNetwork Foundation. It provides the solarssh@ template service that can establish SSH connections to the SolarSSH proxy and the solarssh-cleaner service to shut down stale SSH connections. The /usr/share/solarnode/bin/solarssh.sh script is used by the System SSH Support SolarNode plugin to manage the SolarSSH sessions.

sn-system

This package contains a lot of core system support for SolarNode.

  • The sn-expandfs service provides a way to expand the root filesystem when started, to take advantage of the whole disk it is installed on, by looking for a /boot/sn-expandfs marker file. This service calls the /usr/share/solarnode/bin/expandfs.sh script.
  • The sn-sshdgenkeys service makes sure SSH server keys are generated if they don't already exist, which usually the situation when a SolarNodeOS device boots up the first time.
  • The /etc/systemd/network/eth.network configuration enables DHCP on the standard eth0 device.
  • The /usr/share/solarnode/bin/netctl.sh script provides helper functions to manage the device network connection.

sn-wifi

Provides the /etc/systemd/network/wlan.network configuration that enables DHCP on the wlan0 device. A sn-wifi-bootconf service looks for a /boot/wpa_supplicant.conf file when started, and moves that to /etc/wpa_supplicant/wpa_supplicant-wlan0.conf. The sn-wifi-conf@ service monitors for wpa_supplicant-X.conf file changes and restarts the sn-wifi service appropriately.

websocat

Provides the websocat utility that enables CLI websocket use, for example for testing OCPP connections.

yasdi

Provides a Debian package of the yasdi shell for interacting with SMA inverters, including a libyasdi package that provides the shared YASDI communication library.

yasdi4j

Provides the yasdi4j library.

Developer Packages

The following packages provide developer and testing support to the SolarNode application:

Package Description
solarnode-app-dev-mock Simulated components such as datum sources and controls. 🔗

solarnode-app-dev-mock

Provides various "mock" components, to simulate integrations with devices.

Name ID
Mock Battery net.solarnetwork.node.datum.battery.mock
Mock Control net.solarnetwork.node.control.mock
Mock Energy Meter net.solarnetwork.node.datum.energymeter.mock
⚠️ **GitHub.com Fallback** ⚠️