# Using third party libraries with ignition tags as variables

**URL:** <https://forum.inductiveautomation.com/t/using-third-party-libraries-with-ignition-tags-as-variables/95802>\
**Category:** Ignition\
**Tags:** ignition81, perspective\
**Created:** [September 10, 2024, 2:40pm UTC](https://forum.inductiveautomation.com/t/using-third-party-libraries-with-ignition-tags-as-variables/95802 "2024-09-10T14:40:29Z")\
**Posts on this page:** 17\
**Page:** 1

<div class="post-metadata">

**Author:** ![Pyrak](https://avatars.discourse-cdn.com/v4/letter/p/e0b2c6/32.png) [@Pyrak](https://forum.inductiveautomation.com/u/Pyrak)\
**Post date:** [September 10, 2024, 2:40pm UTC](https://forum.inductiveautomation.com/t/using-third-party-libraries-with-ignition-tags-as-variables/95802/1 "2024-09-10T14:40:29Z")

</div>

I have process that requires me to use steamtables (thermodynamics) to calculate heat consumption in my system using tag values from my plc. I need the calculations done in realtime. If I install pyXSteam to the `C:\Program Files\Inductive Automation\Ignition\user-lib\pylib>` I get this error:

```python
Could not import runpy module
Traceback (most recent call last):
  File "<frozen runpy>", line 14, in <module>
  File "<frozen importlib.machinery>", line 3, in <module>
ModuleNotFoundError: No module named 'importlib._bootstrap'

```

Is there a way I run the script externally or within Ignition using the library while using tag values as input variables to the script?

---

<div class="post-metadata">

**Author:** ![Benjamin\_Furlani](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/benjamin_furlani/32/66084_2.png) [@Benjamin\_Furlani](https://forum.inductiveautomation.com/u/Benjamin_Furlani)\
**Post date:** [September 10, 2024, 2:58pm UTC](https://forum.inductiveautomation.com/t/using-third-party-libraries-with-ignition-tags-as-variables/95802/2 "2024-09-10T14:58:46Z")

</div>

You may not have all the dependencies that pyXSteam requires. Or that library is expecting python3 when Ignition is using Jython2.7

specifically  
 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/3/0/301576113889c5c93360af099ac28bf38e276ab3.png)

---

<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:** [September 10, 2024, 3:02pm UTC](https://forum.inductiveautomation.com/t/using-third-party-libraries-with-ignition-tags-as-variables/95802/3 "2024-09-10T15:02:28Z")

</div>

You should consider using @bmusson's free 3rd party module for this task. Part of his `Embr` project:

> **[GitHub - mussonindustrial/embr: Modules for Ignition by Inductive Automation 🔥](https://github.com/mussonindustrial/embr)**
>
> Modules for Ignition by Inductive Automation 🔥

Look at the "Releases" in the right sidebar.

---

<div class="post-metadata">

**Author:** ![bmusson](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/bmusson/32/87530_2.png) [@bmusson](https://forum.inductiveautomation.com/u/bmusson)\
**Post date:** [September 10, 2024, 3:15pm UTC](https://forum.inductiveautomation.com/t/using-third-party-libraries-with-ignition-tags-as-variables/95802/4 "2024-09-10T15:15:22Z")

</div>

Yup, this should have everything you need. Here’s the direct link to the docs:

> <https://github.com/mussonindustrial/embr/blob/47afbabb963380856435f777468d981b8f1dada4/modules/thermo/README.md>

---

<div class="post-metadata">

**Author:** ![Pyrak](https://avatars.discourse-cdn.com/v4/letter/p/e0b2c6/32.png) [@Pyrak](https://forum.inductiveautomation.com/u/Pyrak)\
**Post date:** [September 10, 2024, 6:11pm UTC](https://forum.inductiveautomation.com/t/using-third-party-libraries-with-ignition-tags-as-variables/95802/5 "2024-09-10T18:11:31Z")

</div>

Thanks a lot @pturmel and @bmusson

---

<div class="post-metadata">

**Author:** ![Pyrak](https://avatars.discourse-cdn.com/v4/letter/p/e0b2c6/32.png) [@Pyrak](https://forum.inductiveautomation.com/u/Pyrak)\
**Post date:** [September 11, 2024, 8:27am UTC](https://forum.inductiveautomation.com/t/using-third-party-libraries-with-ignition-tags-as-variables/95802/6 "2024-09-11T08:27:15Z")

</div>

@bmusson there seems to be a configuration issue when I use the expression examples in the readme file.

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/9/8/989a376517f6e4c5849c6ed0586487b1c639636e.png)  
 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/b/a/ba2455a54ea497dd93ec7113d84bee782a3ecd6e.png)

---

<div class="post-metadata">

**Author:** ![pascal.fragnoud](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pascal.fragnoud/32/24728_2.png) [@pascal.fragnoud](https://forum.inductiveautomation.com/u/pascal.fragnoud)\
**Post date:** [September 11, 2024, 8:31am UTC](https://forum.inductiveautomation.com/t/using-third-party-libraries-with-ignition-tags-as-variables/95802/7 "2024-09-11T08:31:51Z")

</div>

Check the tag's diagnostics. Click this icon on the top right of the tag popup window:  
 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/7/3/7367bb475b21f9e982c0be22c97e5b634816ad4b.png)

This will give you more details:

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/d/3/d305556392e66d7fbae5c74a966c54e46362b51b.png)

---

<div class="post-metadata">

**Author:** ![Pyrak](https://avatars.discourse-cdn.com/v4/letter/p/e0b2c6/32.png) [@Pyrak](https://forum.inductiveautomation.com/u/Pyrak)\
**Post date:** [September 11, 2024, 8:47am UTC](https://forum.inductiveautomation.com/t/using-third-party-libraries-with-ignition-tags-as-variables/95802/8 "2024-09-11T08:47:49Z")

</div>

![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/5/0/5011df0a4c2cbe4ef408d9558fcf4914235a2afc.png)  
 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/7/7/772fd70570cf76ad6efb61a53fcf80badbeb67dd.png)  
The function seems fine from the expression side. What could I be doing wrong?

---

<div class="post-metadata">

**Author:** ![pascal.fragnoud](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pascal.fragnoud/32/24728_2.png) [@pascal.fragnoud](https://forum.inductiveautomation.com/u/pascal.fragnoud)\
**Post date:** [September 11, 2024, 8:50am UTC](https://forum.inductiveautomation.com/t/using-third-party-libraries-with-ignition-tags-as-variables/95802/9 "2024-09-11T08:50:42Z")

</div>

Did you install @bmusson's module ?  
The functions listed in the readme are part of his module, they are NOT built-in.

The diagnostic message "Unknown function: 'if97'" suggests that you did not install the module, or that it wasn't installed properly.

---

<div class="post-metadata">

**Author:** ![Pyrak](https://avatars.discourse-cdn.com/v4/letter/p/e0b2c6/32.png) [@Pyrak](https://forum.inductiveautomation.com/u/Pyrak)\
**Post date:** [September 11, 2024, 8:54am UTC](https://forum.inductiveautomation.com/t/using-third-party-libraries-with-ignition-tags-as-variables/95802/10 "2024-09-11T08:54:41Z")

</div>

Yeah, I have the module installed.  
If I add an expression binding to a label component using the same function everything works fine. I am only experiencing the problem when I use it in an expression type tag.

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/a/3/a36662ed8bb92b8a80fac311e8f1c34f12a1b77b.png)

---

<div class="post-metadata">

**Author:** ![pascal.fragnoud](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pascal.fragnoud/32/24728_2.png) [@pascal.fragnoud](https://forum.inductiveautomation.com/u/pascal.fragnoud)\
**Post date:** [September 11, 2024, 9:05am UTC](https://forum.inductiveautomation.com/t/using-third-party-libraries-with-ignition-tags-as-variables/95802/11 "2024-09-11T09:05:05Z")

</div>

I'm not sure that's relevant for expressions, but that sounds like global scripting project issues.

Do you have a GSP configured ? You can find this on your gateway page, under config -\> gateway settings.

---

<div class="post-metadata">

**Author:** ![Pyrak](https://avatars.discourse-cdn.com/v4/letter/p/e0b2c6/32.png) [@Pyrak](https://forum.inductiveautomation.com/u/Pyrak)\
**Post date:** [September 11, 2024, 9:28am UTC](https://forum.inductiveautomation.com/t/using-third-party-libraries-with-ignition-tags-as-variables/95802/12 "2024-09-11T09:28:04Z")

</div>

It's not configured

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/2/8/2836fe245c7f456ab6c286e67121cdceaa423c88.png)

---

<div class="post-metadata">

**Author:** ![pascal.fragnoud](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pascal.fragnoud/32/24728_2.png) [@pascal.fragnoud](https://forum.inductiveautomation.com/u/pascal.fragnoud)\
**Post date:** [September 11, 2024, 10:09am UTC](https://forum.inductiveautomation.com/t/using-third-party-libraries-with-ignition-tags-as-variables/95802/13 "2024-09-11T10:09:10Z")

</div>

Try configuring it (just put the name of your project) and see if it changes anything.

---

<div class="post-metadata">

**Author:** ![Pyrak](https://avatars.discourse-cdn.com/v4/letter/p/e0b2c6/32.png) [@Pyrak](https://forum.inductiveautomation.com/u/Pyrak)\
**Post date:** [September 11, 2024, 10:25am UTC](https://forum.inductiveautomation.com/t/using-third-party-libraries-with-ignition-tags-as-variables/95802/14 "2024-09-11T10:25:19Z")

</div>

Nothing has changed.

---

<div class="post-metadata">

**Author:** ![bmusson](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/bmusson/32/87530_2.png) [@bmusson](https://forum.inductiveautomation.com/u/bmusson)\
**Post date:** [September 11, 2024, 11:31am UTC](https://forum.inductiveautomation.com/t/using-third-party-libraries-with-ignition-tags-as-variables/95802/15 "2024-09-11T11:31:51Z")

</div>

Can you restart your gateway?

> [@Custom Expression Function not recognized "Unknown Function"](https://forum.inductiveautomation.com/t/custom-expression-function-not-recognized-unknown-function/91206/4):
>
> Interesting. I had a report here in the forum about my Integration Toolkit functions not working for expression tags but everywhere else. That reporter fixed it by restarting their gateway and I never reproduced it. Bug in the tag provider hierarchy, perhaps?

---

<div class="post-metadata">

**Author:** ![victordcq](https://avatars.discourse-cdn.com/v4/letter/v/f6c823/32.png) [@victordcq](https://forum.inductiveautomation.com/u/victordcq)\
**Post date:** [September 11, 2024, 11:31am UTC](https://forum.inductiveautomation.com/t/using-third-party-libraries-with-ignition-tags-as-variables/95802/16 "2024-09-11T11:31:54Z")

</div>

restart gateway after filling that in

---

<div class="post-metadata">

**Author:** ![Pyrak](https://avatars.discourse-cdn.com/v4/letter/p/e0b2c6/32.png) [@Pyrak](https://forum.inductiveautomation.com/u/Pyrak)\
**Post date:** [September 11, 2024, 12:00pm UTC](https://forum.inductiveautomation.com/t/using-third-party-libraries-with-ignition-tags-as-variables/95802/17 "2024-09-11T12:00:13Z")

</div>

Everything works fine after restarting the gateway.  
Thank you.
