Skip to content

Latest commit

 

History

48 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

Schneider Electric EcoStruxure Building Operation

Open, flexible, data-centric. Go beyond traditional building management system functionality to create smart, future-ready buildings with EcoStruxure Building Operation. Part of the EcoStruxure Building integrated smart building platform; this open, flexible, data-centric solution provides a single control center to monitor, manage and optimize all types of buildings.

To learn more, see EcoStruxure Building

EcoStruxure Building Operation Edge Server is subject to commercial licensing. Contact your local Schneider Electric representative for more information.

How to use this image

For full functionality, valid and activated licenses are required. See official Building Operation documentation for more information.

To manage the containers we do provide a few docker scripts to use as is or to draw inspiration from: user-scripts

Network

We recommend that you use this container with an IPvlan network. This to give the container its own IP address on the local network for simple communication with for example BACnet devices on the same network.

If you run the script, like this:

./create-bridged-network 192.168.1.0/24 192.168.1.1 eth0

It will create a network called "bridged-net".

  • The first parameter is the subnet (in the example above 192.168.1.0/24) matching the subnet for the host machine.
#find your subnet
ip -o -f inet addr show | awk '/scope global/ {print $4}'
  • The second parameter is the gateway (in the example above 192.168.1.1)
# find your gateway
ip route | grep default
# Example output:
default via 10.142.16.1 dev eth0 proto dhcp src 10.142.16.223 metric 100
# in this example the gateway is 10.142.16.1
  • The third parameter is the name of the network interface on the host machine (in this example eth0)
ip ad
# Example output:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp4s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 10:7b:44:a3:39:a1 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.251/24 brd 192.168.1.255 scope global dynamic noprefixroute enp4s0
       valid_lft 1497sec preferred_lft 1497sec
    inet6 fe80::5f24:6a3e:43cc:c39f/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
# in this example the interface is enenp4s0

Then you need to have a free IP address in that subnet to set as a static address for your container.

EULA

The End-User License Agrement (EULA) must be accepted before the server can start.
The license terms for this product can be downloaded here: EULA

Start

Then to start your server:

./start.py --name=cs3 --version=5.0.0.1082 --ip=192.168.1.3 --type=ebo-edge-server --accept-eula=Yes

You can interact with the server via your browser: https://192.168.1.3/.
Initial user name: admin, password: admin
The version and IP are only examples.
By default the server type is an Edge Server. To start an Enterprise Server or Enterprise Central instead. add --type=ebo-enterprise-server or --type=ebo-enterprise-central

Upgrade

To upgrade the server, use the same parameters as for start, but with the new version.

./upgrade.py --name=cs3 --version=5.0.0.1090 --ip=192.168.1.3 --type=ebo-edge-server --accept-eula=Yes

The version and IP are only examples

Backup management

There are also three scripts for backup management, for more details look in the scripts:

list-backups

./list-backups cs3
Server 1 2022-09-09 14_12_36_5.0.0.1082.xbk

copy-backups

./copy-backups cs3 /tmp

restore-backup

Can be used with a backup file on the host machine or one of the backup files listed by list-backups. Options

  • ConfigurationOnly
  • AllData
# With just the name of the backup if you want to use the backup already available in the container
# note that you need to escape spaces in the backup name
./restore-backup cs3 5.0.0.82 Server\ 1\ 2022-09-09\ 14_12_36_5.0.0.1082.xbk ConfigurationOnly
# Or with a path to a backup on the host if you want to use a backup from the host
./restore-backup cs3 5.0.0.82 /home/user/Server\ 1\ 2022-09-09\ 14_12_36_5.0.0.1082.xbk ConfigurationOnly

CA certificates

The container ships with a default CA bundle (Mozilla roots) at /opt/sbo/etc/ca-bundle.crt which is sufficient to reach public TLS endpoints out of the box. To trust additional CAs (typically corporate / private roots), prepare a single PEM file containing both the Mozilla roots and your own CAs and pass it to start.py:

--ca-bundle=/home/user/my-ca-bundle.crt

The file is bind-mounted read-only over /opt/sbo/etc/ca-bundle.crt inside the container; nothing is rebuilt at startup and no privileged operations are required.

To build the bundle, copy the default out of an existing container and append your own certificates:

docker cp <container>:/opt/sbo/etc/ca-bundle.crt ./my-ca-bundle.crt
cat company-ca.crt >> ./my-ca-bundle.crt

Alternatively, build your own image on top of ours and replace /opt/sbo/etc/ca-bundle.crt at build time.

The previous --ca-folder flag is no longer supported. start.py will fail with a clear error if it is used.

Proxy

The script start.py (and upgrade.py) will pick up the the proxy environment variables from the host and pass them on to the container. If you want to use other settings you can supply them with these parameters:
--http-proxy
--https-proxy
--no-proxy
The environment varibles are, http_proxy, https_proxy and no_proxy in both lower and upper case.

In case of crash

You can enable the container to send crash dumps to Schneider Electric, by setting the kernel core pattern of the host to:

sudo sysctl -w kernel.core_pattern=/var/crash/%t.%E.h%h.P%P.s%s.g%g.u%u.core

Apport wants to set the default pattern so to persist the core pattern, you need to disable apport.

sudo nano /etc/default/apport

change to:

enabled=0

To set the core pattern at boot:

 sudo nano /etc/sysctl.d/99-sysctl.conf

at the end of this file add:

kernel.core_pattern = /var/crash/%t.%E.h%h.P%P.s%s.g%g.u%u.core

The host also need to allow crash dumps, like this, then restart the host:

sudo nano /etc/security/limits.conf
# add these lines at the end
* soft core unlimited
* hard core unlimited

The container will look for dump files in /var/crash from the core_pattern above. That folder used must be writable by other or by the user/group 60606 used by the container. Working DNS is also a prerequisite for the container to be able to send the crash information to Schneider Electric, see below.

DNS

If your container can't reach the dns setup on your host, for example because of VPN. There are an optional parameter to the start script:

--dns=<some IP for a public dns>

Set server in Password Reset Mode

To set server in Password Reset Mode, run the script with name and version as arguments.

./password-reset-mode cs3 5.0.1.128

A few useful docker commands

If you have started a server named cs1. Show log:

docker logs cs1
# and to follow the log, quit with Ctrl+C
docker logs -f cs1

Show running containers:

docker ps
# also show the stopped containers
docker ps -a

Stop the server:

docker stop cs1

Remove the container, to be able to start it again. Database will be kept:

docker rm cs1

List volumes (databases):

docker volume ls

Remove the database to start from scratch:

docker volume rm cs1-db

If you want to play with a server without the need to talk to devices you can start it with port forwarding like this:

docker run -d --name=cs1 -hostname=cs1 -p 1080:80 -p 1443:443 -p14444:4444 -e NSP_ACCEPT_EULA=Yes ghcr.io/schneiderelectricbuildings/ebo-edge-server:5.0.0.1220

In this example you can connect to it on: https://localhost:1443 The http-port is 1080 on the host machine. The tcp-port is 14444 on the host machine. It runs the example version 5.0.0.1220. It is namned cs1.

GraphDB

For containers we use the standard GraphDB from https://hub.docker.com/r/ontotext/graphdb/ to get a license contact https://www.ontotext.com/. For test you can run it without a license in free mode. You need to have a free IP address in that subnet to set as a static address for your container.

If you use semantics, then you start GraphDB like this:

./start-graphdb 192.168.1.6

The IP is just an example. When it has been started, access it at (for this example) http://192.168.1.6:7200. Create a new GraphDB repository with id "nsp". Also choose to enable context index. If you then start your ebo-enterprise-server or ebo-enterprise-central with:

--graphdb=http://192.168.1.6:7200

The server will connect to this instance and upload the ontologies to GrapDB. You could also manually set the url in the servers Semantic settings and right click on semantics to upload the ontologies. When the ontologies are uploaded you need to relogin to WorkStation to enable the semantic functionality.

About

The official EcoStruxure™ Building Operation Servers page.

Resources

Security policy

Stars

39 stars

Watchers

15 watching

Forks

Releases

Packages

Used by

Contributors

Languages