# Opex62541

Opex62541 is an Elixir wrapper for the [open62541]( library; open62541 is an open-source implementation of OPC UA (OPC Unified Architecture) aka IEC 62541 licensed under Mozilla Public License v2.0.

## Content

- [Features](#features)
- [Installation](#installation)
  - [Compatibility](#compatibility)
  - [Nerves](#nerves)
  - [Customized build](#customized-build)
- [Documentation](#documentation)
- [Contributing](#contributing)
- [License](#license)

## Features

This library implements the following features from [open62541](
- Communication Stack
  - OPC UA binary protocol
  - Secure communication with encrypted messages
- Server
  - Support for all OPC UA node types
  - Access control for individual nodes
  - Support for adding and removing nodes and references also at runtime.
  - Support for inheritance and instantiation of object and variable-types.
  - Support for subscriptions/monitored items.
- Client
  - All OPC UA services supported
  - Support for subscriptions/monitored items.

## Installation

To install this package, add `opex62541` to your list of dependencies in `mix.exs`:

def deps do
    {:opex62541, git: ""}

### Compatibility

Opex62541 was developed for open62541 "1.0.0" with Elixir 1.10.0. It was tested on:
  * Ubuntu 18.04, 20.04
  * Raspbian OS (Raspberry Pi 3B+)
  * Nerves (Raspberry Pi 3B+)

Adding the following `opex62541` dependencies to build the package:

sudo apt-get install git build-essential gcc pkg-config cmake python libmbedtls-dev

### Nerves

[Nerves]( is a complete IoT platform and infrastructure to build and deploy maintainable embedded systems to boards such as Raspberry Pi or Beaglebone.

To add `opex62541` dependency (`mbedtls`) to your Nerves project, you need to create a [Nerves Custom System]( and add the following lines to the `nerves_defconfig` file:


### Customized builds

By default, Opex62541 downloads and compiles the `v1.0` release of open62541. If you want to compile it manually or change the default version, use the following example commands to set the desired env variables:

export MANUAL_BUILD=true

export OPEN62541_DOWNLOAD_VERSION=v1.0.1
The open62541 project uses CMake to manage the build options for code generation and to generate build projects for the different systems and IDEs. To overwrite the default options, use `OPEN62541_BUILD_ARGS` as follows:



## Docker Container

To build the container locally use:

git clone
cd opex62541
docker build -t <name:tag> .

You can use this container to test this application. 

## Documentation

For detailed documentation and tutorials refer to [](

## Contributing
  * Fork our repository on Github.
  * Fix or add what is needed.
  * Commit to your repository
  * Issue a Github Pull Request.
  * Fill the pull request template.

If you wish to clone this repository, use:
git clone

## License


  * **Methods**
  * **OPC UA PubSub**
  * **Better C code handling for the Client and Server common code**