# Pointers to implementing a new Tag-Historian for Apache IoTDB?

**URL:** <https://forum.inductiveautomation.com/t/pointers-to-implementing-a-new-tag-historian-for-apache-iotdb/85278>\
**Category:** Module Development\
**Created:** [February 6, 2024, 8:21am UTC](https://forum.inductiveautomation.com/t/pointers-to-implementing-a-new-tag-historian-for-apache-iotdb/85278 "2024-02-06T08:21:04Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![christofer.dutz](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/christofer.dutz/32/76634_2.png) [@christofer.dutz](https://forum.inductiveautomation.com/u/christofer.dutz)\
**Post date:** [February 6, 2024, 8:21am UTC](https://forum.inductiveautomation.com/t/pointers-to-implementing-a-new-tag-historian-for-apache-iotdb/85278/1 "2024-02-06T08:21:04Z")

</div>

Hi,  
I am currently working hard on getting Apache IoTDB deployed on various platforms, that would benefit from a high performant time-series DB. As part of this, would I love to implement a Tag-Historian extension for IoTDB for Ignition. As IoTDB is implemented in Java, running it inside Ignition would also be an option.

As I am really new to Ignition (even if I did have contact with it at a previous employer) I would really appreciate some pointers to APIs, documentation regarding the development of a Tag-Historian for Ignition.

From what I've read here in the forum, the pretty unique way IoTDB stores data, would eliminate moste of the disadvantages of storing data in a tag-historian.

Here some pretty fresh benchmark results that were done by an independent company:

> **[Apache IoTDB Performance Benchmarks](https://benchant.com/blog/apache-iotdb-performance)**
>
> Performance analysis of Apache IoTDB for benchANT database ranking with read throughput, latencies and data compression.

Help greatly appreciated,  
Chris

---

<div class="post-metadata">

**Author:** ![mazeyrat](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/mazeyrat/32/10955_2.png) [@mazeyrat](https://forum.inductiveautomation.com/u/mazeyrat)\
**Post date:** [February 6, 2024, 8:36am UTC](https://forum.inductiveautomation.com/t/pointers-to-implementing-a-new-tag-historian-for-apache-iotdb/85278/2 "2024-02-06T08:36:05Z")

</div>

Welcome Christofer,  
are you the man behind **apache plc4x**?

[https://plc4x.apache.org/](https://plc4x.apache.org/)

The most relevant ressources for Ignition SDK are:

> **[Inductive Automation](https://github.com/inductiveautomation)**
>
> Inductive Automation has 11 repositories available. Follow their code on GitHub.

> **[Ignition SDK Programmer's Guide | Ignition SDK Programmer's Guide](https://www.sdk-docs.inductiveautomation.com/)**
>
> Description will go into a meta tag in

> **[Storing History Using Store and Forward | Ignition SDK Programmer's Guide](https://www.sdk-docs.inductiveautomation.com/docs/programming-for-the-gateway/storing-history-using-store-and-forward/#the-core-pieces)**
>
> The store and forward system works as a pipeline to deliver data reliably to the database. The database is a data sink, and data is buffered in the store and forward engine using a mixture of memory and disk storage until it can be delivered. If the...

Perhaps this repo can be interesting for implementing tag Historian

> **[GitHub - hms-networks/IgnitionEwonConnector: Synchronize Ewon data to...](https://github.com/hms-networks/IgnitionEwonConnector)**
>
> Synchronize Ewon data to Ignition's Tag Historian. Contribute to hms-networks/IgnitionEwonConnector development by creating an account on GitHub.

A new major version of **Ignition 8.3** is on the road for the end of this year.  
Some API refactor could occur around Tag historian.  
Perhaps @paul-griffith could give you some clarifications.

---

<div class="post-metadata">

**Author:** ![paul-griffith](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/paul-griffith/32/37249_2.png) [@paul-griffith](https://forum.inductiveautomation.com/u/paul-griffith)\
**Post date:** [February 6, 2024, 5:11pm UTC](https://forum.inductiveautomation.com/t/pointers-to-implementing-a-new-tag-historian-for-apache-iotdb/85278/3 "2024-02-06T17:11:13Z")

</div>

Expect _significant_ refractors to the tag historian interfaces in 8.3.0. I wouldn't start a greenfield project until mid 2024, when we're expecting to have API changes finalized or at least close to so module authors can start developing against the new version of the platform.

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [February 6, 2024, 5:12pm UTC](https://forum.inductiveautomation.com/t/pointers-to-implementing-a-new-tag-historian-for-apache-iotdb/85278/4 "2024-02-06T17:12:06Z")

</div>

> [@paul-griffith](#):
>
> I wouldn't start a greenfield project

Awww! I have one in mind...

But, if you make it possible to select historians in the tag editor that **don't** use the SQLTAGS data flavor, I suppose it will be worth the wait.

---

<div class="post-metadata">

**Author:** ![christofer.dutz](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/christofer.dutz/32/76634_2.png) [@christofer.dutz](https://forum.inductiveautomation.com/u/christofer.dutz)\
**Post date:** [February 6, 2024, 7:51pm UTC](https://forum.inductiveautomation.com/t/pointers-to-implementing-a-new-tag-historian-for-apache-iotdb/85278/5 "2024-02-06T19:51:41Z")

</div>

Hi,

guilty as charged 😉 ... yeah Apache PLC4X is my baby, indeed ... new big update coming pretty soon 😉

Thanks for the pointers. They will definitely help a lot.  
Right now there's one customer interested in this and I guess I'll whip up something and we can start learning with that ... once the major refactoring is done, I guess it makes sense to concentrate on building something "product-wise".

Will look into this tomorrow ... but a huge help .. thanks 😉

---

<div class="post-metadata">

**Author:** ![mazeyrat](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/mazeyrat/32/10955_2.png) [@mazeyrat](https://forum.inductiveautomation.com/u/mazeyrat)\
**Post date:** [February 6, 2024, 8:06pm UTC](https://forum.inductiveautomation.com/t/pointers-to-implementing-a-new-tag-historian-for-apache-iotdb/85278/6 "2024-02-06T20:06:25Z")

</div>

Great, otherwise for waiting the new major release you can train with the SDK by adding a Profinet IO driver for Ignition 😜.  
Driver expose data with @Kevin.Herron Opcua Milo stack you are already known.

---

<div class="post-metadata">

**Author:** ![christofer.dutz](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/christofer.dutz/32/76634_2.png) [@christofer.dutz](https://forum.inductiveautomation.com/u/christofer.dutz)\
**Post date:** [February 7, 2024, 8:32am UTC](https://forum.inductiveautomation.com/t/pointers-to-implementing-a-new-tag-historian-for-apache-iotdb/85278/7 "2024-02-07T08:32:59Z")

</div>

Oh gee ... with the PROFINET stuff ... I think my hair is getting gray because of it ... We've come pretty far, but making it usable and stable is a hell of a job.

At least now I know why no other open-source profinet-master exists out there :-/

---

<div class="post-metadata">

**Author:** ![christofer.dutz](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/christofer.dutz/32/76634_2.png) [@christofer.dutz](https://forum.inductiveautomation.com/u/christofer.dutz)\
**Post date:** [February 7, 2024, 12:38pm UTC](https://forum.inductiveautomation.com/t/pointers-to-implementing-a-new-tag-historian-for-apache-iotdb/85278/8 "2024-02-07T12:38:31Z")

</div>

Regarding your links AT mazeyrat (As I seem to be not allowed to mention you ... yet) it seems that the last link would be interesting for an Apache PLC4X Adapter, right? I should probably check the licenses the required API modules are available under (Being an Apache project does restrict us a bit with what we are able to do)

---

<div class="post-metadata">

**Author:** ![christofer.dutz](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/christofer.dutz/32/76634_2.png) [@christofer.dutz](https://forum.inductiveautomation.com/u/christofer.dutz)\
**Post date:** [February 7, 2024, 5:38pm UTC](https://forum.inductiveautomation.com/t/pointers-to-implementing-a-new-tag-historian-for-apache-iotdb/85278/9 "2024-02-07T17:38:17Z")

</div>

Hi all,

so I've started inspecting things and I've setup a base module using the archetype. So my first steps were to build a module based on that, deploying it and then continuing from there on.

So as I didn't quite like doing manual steps in my builds, I whipped up a little maven plugin that uses the module-signer to sign the finished modules. However when installing the modules I got "signature verification failed" errors. When trying to install it the first time, Ignition asked me about the risk of using self signed modules, but I accepted. Unfortunately I seem to be unable to deploy the modules I built.

As I didn't trust my own plugin, I tried using the module-signer according to this: [Sign a Module | Ignition SDK Programmer's Guide](https://www.sdk-docs.inductiveautomation.com/docs/getting-started/create-a-module/module-signing) (However I had to build a fat-jar first, as the one I got from here: [https://nexus.inductiveautomation.com/service/rest/repository/browse/inductiveautomation-releases/com/inductiveautomation/ignitionsdk/module-signer/0.0.1/](https://nexus.inductiveautomation.com/service/rest/repository/browse/inductiveautomation-releases/com/inductiveautomation/ignitionsdk/module-signer/0.0.1/) didn't contain it's dependencies.

I'm a bit stuck here now ... any help greatly appreciated.

So I've created the files the tool is looking for with this:

```python
## Generate a self-signed CA certificate

openssl genrsa -des3 -out server.key 4096
openssl req -new -key server.key -out server.csr
openssl x509 -req -days 1024 -in server.csr -signkey server.key -out server.crt
openssl crl2pkcs7 -nocrl -certfile server.crt -out server.p7b -certfile server.crt

## Generate a key-signing certificate

openssl genrsa -des3 -out code-signing.key 4096
openssl req -new -key code-signing.key -out code-signing.csr
openssl x509 -req -in code-signing.csr -CA server.crt -CAkey server.key -CAcreateserial -out code-signing.pem -days 1024 -sha256
openssl pkcs12 -inkey code-signing.key -in code-signing.pem -export -out code-signing.p12
keytool -importkeystore -srckeystore code-signing.p12 -srcstoretype pkcs12 -destkeystore code-signing.jks

```

Any ideas?

---

<div class="post-metadata">

**Author:** ![mazeyrat](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/mazeyrat/32/10955_2.png) [@mazeyrat](https://forum.inductiveautomation.com/u/mazeyrat)\
**Post date:** [February 7, 2024, 7:13pm UTC](https://forum.inductiveautomation.com/t/pointers-to-implementing-a-new-tag-historian-for-apache-iotdb/85278/10 "2024-02-07T19:13:04Z")

</div>

You have to build the module-signer from here:

> **[GitHub - inductiveautomation/module-signer: A utility that signs modules for...](https://github.com/inductiveautomation/module-signer)**
>
> A utility that signs modules for use in Ignition. Contribute to inductiveautomation/module-signer development by creating an account on GitHub.

perhaps a post relative to your issue:

> [@Self signed module not loading](https://forum.inductiveautomation.com/t/self-signed-module-not-loading/79678):
>
> I've tried to follow the module signing instructions here: [https://docs.inductiveautomation.com/display/SE/Module+Signing](https://docs.inductiveautomation.com/display/SE/Module+Signing) and, along with help some other resources, managed to get my module signed but it won't load on a system that is not in developer mode. Certificate for module REST-Alarm-Notification-signed.modl not trusted I'm wanting to use a self signed module for internal use as described in the docs: Modules can be signed using either a real code signing certificate obtained from a…

For dev and test purpose you can **allow unsigned modules** on your gateway:

[https://docs.inductiveautomation.com/display/DOC81/Gateway+and+Gateway+Network+Parameters#GatewayandGatewayNetworkParameters-LoadingUnsignedModules-DeveloperMode](https://docs.inductiveautomation.com/display/DOC81/Gateway+and+Gateway+Network+Parameters#GatewayandGatewayNetworkParameters-LoadingUnsignedModules-DeveloperMode)

Ignition.conf

```auto
wrapper.java.additional.1=-Dignition.allowunsignedmodules=true

```

and restart ignition service

**As a side note:  
It's better to open a new post for a new subject (and to tag it).  
You will have much more response 🙂 !**

To sign your module at the end of the build with maven you can add something like:

```auto
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.5.0</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>exec</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <executable>${java.home}/bin/java</executable>
                    <arguments>
                        <argument>-jar</argument>
                        <jar>${signer-jar}</jar>
                        <argument>-keystore=${signer-export-certif}</argument>
                        <argument>-keystore-pwd=${signer-pwd}</argument>
                        <argument>-alias=byes-siai</argument>
                        <argument>-alias-pwd=${signer-pwd}</argument>
                        <argument>-chain=${signer-certif}</argument>
                        <argument>-module-in=${signer-in_module}</argument>
                        <argument>-module-out=${signer-out_module}</argument>
                    </arguments>
                </configuration>
            </plugin>

```

---

<div class="post-metadata">

**Author:** ![christofer.dutz](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/christofer.dutz/32/76634_2.png) [@christofer.dutz](https://forum.inductiveautomation.com/u/christofer.dutz)\
**Post date:** [February 8, 2024, 7:26am UTC](https://forum.inductiveautomation.com/t/pointers-to-implementing-a-new-tag-historian-for-apache-iotdb/85278/11 "2024-02-08T07:26:53Z")

</div>

> [@mazeyrat](#):
>
> ```python
> wrapper.java.additional.1=-Dignition.allowunsignedmodules=true
> 
> ```

Hi,  
Ok ... with disabling the module signatures I was able to deploy my module ... let's just shift the whole module signing to when I've managed to get something working 😉

Thanks for your help and I'll open new threads for anything new that I run into.

But even with a locally build module-signer was my module not accepted in the end.

Chris

---

<div class="post-metadata">

**Author:** ![christofer.dutz](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/christofer.dutz/32/76634_2.png) [@christofer.dutz](https://forum.inductiveautomation.com/u/christofer.dutz)\
**Post date:** [February 13, 2024, 10:49am UTC](https://forum.inductiveautomation.com/t/pointers-to-implementing-a-new-tag-historian-for-apache-iotdb/85278/12 "2024-02-13T10:49:56Z")

</div>

It also seems that my maven plugin actually seems to be working now ... not sure what it didn't like about the signatures earlier. Just happy it's working now.
