# Timer Script: 'com.inductiveautomation.ignition.common.script.Imm' object has no attribute 'ws'

**URL:** <https://forum.inductiveautomation.com/t/timer-script-com-inductiveautomation-ignition-common-script-imm-object-has-no-attribute-ws/113626>\
**Category:** Ignition\
**Tags:** perspective\
**Created:** [January 29, 2026, 11:36am UTC](https://forum.inductiveautomation.com/t/timer-script-com-inductiveautomation-ignition-common-script-imm-object-has-no-attribute-ws/113626 "2026-01-29T11:36:58Z")\
**Posts on this page:** 13\
**Page:** 1

<div class="post-metadata">

**Author:** ![Alejandro\_Alaco](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/alejandro_alaco/32/59849_2.png) [@Alejandro\_Alaco](https://forum.inductiveautomation.com/u/Alejandro_Alaco)\
**Post date:** [January 29, 2026, 11:36am UTC](https://forum.inductiveautomation.com/t/timer-script-com-inductiveautomation-ignition-common-script-imm-object-has-no-attribute-ws/113626/1 "2026-01-29T11:36:58Z")

</div>

I can´t open projects from gateway on client computer.

Any idea what this error on the gateway is related to and how to fix it.

Error in Timer Script: 'com.inductiveautomation.ignition.common.script.Imm' object has no attribute 'ws'

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

ExecutionException: com.inductiveautomation.ignition.client.gateway\_interface.GatewayException: Connection reset  
caused by GatewayException: Connection reset  
caused by SocketException: Connection reset

Any ideas welcome.

---

<div class="post-metadata">

**Author:** ![bschroeder](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/bschroeder/32/13260_2.png) [@bschroeder](https://forum.inductiveautomation.com/u/bschroeder)\
**Post date:** [January 29, 2026, 11:42am UTC](https://forum.inductiveautomation.com/t/timer-script-com-inductiveautomation-ignition-common-script-imm-object-has-no-attribute-ws/113626/2 "2026-01-29T11:42:24Z")

</div>

We are going to need to see the script to help.

---

<div class="post-metadata">

**Author:** ![Alejandro\_Alaco](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/alejandro_alaco/32/59849_2.png) [@Alejandro\_Alaco](https://forum.inductiveautomation.com/u/Alejandro_Alaco)\
**Post date:** [January 29, 2026, 11:53am UTC](https://forum.inductiveautomation.com/t/timer-script-com-inductiveautomation-ignition-common-script-imm-object-has-no-attribute-ws/113626/3 "2026-01-29T11:53:54Z")

</div>

```python
TimerScriptTask	29Jan2026 12:46:36	Error executing global timer script: Copy_Of_Version-12_5-01-08-25/MAX_DNF_KW @300.000ms . Repeat errors of this type will be logged as 'debug' messages.
com.inductiveautomation.ignition.common.script.JythonExecException: Traceback (most recent call last): File "", line 6, in File "", line 61, in comprobarGuardado TypeError: str indices must be integers

at org.python.core.Py.TypeError(Py.java:234)

at org.python.core.SequenceIndexDelegate.checkIdxAndFindItem(SequenceIndexDelegate.java:74)

at org.python.core.SequenceIndexDelegate.checkIdxAndGetItem(SequenceIndexDelegate.java:61)

at org.python.core.PySequence.seq ___getitem__ (PySequence.java:378)

at org.python.core.PySequence. __getitem__ (PySequence.java:374)

at org.python.pycode._pyx105.comprobarGuardado$3(:164)

at org.python.pycode._pyx105.call_function()

at org.python.core.PyTableCode.call(PyTableCode.java:173)

at org.python.core.PyBaseCode.call(PyBaseCode.java:134)

at org.python.core.PyFunction. __call__ (PyFunction.java:416)

at org.python.pycode._pyx104.f$0(:37)

at org.python.pycode._pyx104.call_function()

at org.python.core.PyTableCode.call(PyTableCode.java:173)

at org.python.core.PyCode.call(PyCode.java:18)

at org.python.core.Py.runCode(Py.java:1703)

at com.inductiveautomation.ignition.common.script.ScriptManager.runCode(ScriptManager.java:804)

at com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle$TrackingProjectScriptManager.runCode(ProjectScriptLifecycle.java:859)

at com.inductiveautomation.ignition.common.script.ScriptManager.runCode(ScriptManager.java:752)

at com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle$TrackingProjectScriptManager.runCode(ProjectScriptLifecycle.java:840)

at com.inductiveautomation.ignition.common.script.TimerScriptTask.run(TimerScriptTask.java:92)

at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)

at java.base/java.util.concurrent.FutureTask.runAndReset(Unknown Source)

at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)

at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)

at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

at java.base/java.lang.Thread.run(Unknown Source)

Caused by: org.python.core.PyException: TypeError: str indices must be integers

```

---

<div class="post-metadata">

**Author:** ![bschroeder](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/bschroeder/32/13260_2.png) [@bschroeder](https://forum.inductiveautomation.com/u/bschroeder)\
**Post date:** [January 29, 2026, 11:55am UTC](https://forum.inductiveautomation.com/t/timer-script-com-inductiveautomation-ignition-common-script-imm-object-has-no-attribute-ws/113626/4 "2026-01-29T11:55:23Z")

</div>

That is the stack trace, can you provide the actual timer script referenced?

---

<div class="post-metadata">

**Author:** ![Alejandro\_Alaco](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/alejandro_alaco/32/59849_2.png) [@Alejandro\_Alaco](https://forum.inductiveautomation.com/u/Alejandro_Alaco)\
**Post date:** [January 29, 2026, 12:01pm UTC](https://forum.inductiveautomation.com/t/timer-script-com-inductiveautomation-ignition-common-script-imm-object-has-no-attribute-ws/113626/5 "2026-01-29T12:01:39Z")

</div>

java.io.IOException: End of stream reached.

at com.inductiveautomation.iosession.socket.AsyncSocketIOSession.run(AsyncSocketIOSession.java:74)

the last piece of code I was running:

```python
try:
    tbl = self.getSibling("tblWorkRequest")
    selectedData = tbl.props.selection.data

    if selectedData and len(selectedData) > 0:
        row = selectedData[0]

        solicitud = row.get('SOLICITUD', None)
        if solicitud in (None, ''):
            raise Exception("La fila seleccionada no contiene el campo 'SOLICITUD'.")

        company_raw = self.parent.custom.company

        if company_raw is None:
            raise Exception("No hay company definida en self.parent.custom.company.")

        if isinstance(company_raw, basestring):
            # Permite "ORANGE", "TIENDAS", "ORANGE,TIENDAS", "ORANGE | TIENDAS", etc.
            cleaned = company_raw.replace("|", ",").replace(";", ",")
            parts = [p.strip().upper() for p in cleaned.split(",") if p.strip()]
            company_list = list(set(parts))
        else:
            # Si ya viene como lista/array (por ejemplo ["ORANGE","TIENDAS"])
            company_list = [str(x).strip().upper() for x in company_raw if str(x).strip()]

        if len(company_list) == 0:
            raise Exception("self.parent.custom.company está vacío.")
        elif len(company_list) == 1:
            company = company_list[0]
        else:
            company = "BOTH"

        ta = self.getSibling("TextArea")
        ta.props.text = (ta.props.text or "") + u"\nPreparando aprobación para solicitud {}...".format(solicitud)

        system.perspective.openPopup(
            id="popup-confirmacion",
            view="Page/Confirmacion",
            params={
                "workRequest": solicitud,
                "company": company,
                "estado": "10",
                "modo": "aprobacion",
                "titulo": "Aprobar Solicitud",
                "mensaje": u"¿Deseas aprobar esta solicitud y generar una orden de trabajo?",
                "infoadicional": ""
            },
            title="Aprobar Solicitud",
            modal=True,
            width=500,
            height=400
        )
    else:
        system.perspective.openPopup(
            id="noneSelected-popup",
            view="Page/NoneSelected",
            title="Sin selección",
            modal=True,
            width=300,
            height=200
        )

except Exception:
    import sys, traceback
    error = "".join(traceback.format_exception(*sys.exc_info()))
    ta = self.getSibling("TextArea")
    ta.props.text = (ta.props.text or "") + "\nError inesperado:\n" + error

```

if I restart the gateway may fix it

---

<div class="post-metadata">

**Author:** ![Alejandro\_Alaco](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/alejandro_alaco/32/59849_2.png) [@Alejandro\_Alaco](https://forum.inductiveautomation.com/u/Alejandro_Alaco)\
**Post date:** [January 29, 2026, 12:04pm UTC](https://forum.inductiveautomation.com/t/timer-script-com-inductiveautomation-ignition-common-script-imm-object-has-no-attribute-ws/113626/6 "2026-01-29T12:04:44Z")

</div>

No running scripts right now, I just restarted the gateway

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

---

<div class="post-metadata">

**Author:** ![bschroeder](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/bschroeder/32/13260_2.png) [@bschroeder](https://forum.inductiveautomation.com/u/bschroeder)\
**Post date:** [January 29, 2026, 12:05pm UTC](https://forum.inductiveautomation.com/t/timer-script-com-inductiveautomation-ignition-common-script-imm-object-has-no-attribute-ws/113626/7 "2026-01-29T12:05:20Z")

</div>

Is that the entire script file?

Specifically lets start with this timer script:

```python
Copy_Of_Version-12_5-01-08-25/MAX_DNF_KW

```

---

<div class="post-metadata">

**Author:** ![Alejandro\_Alaco](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/alejandro_alaco/32/59849_2.png) [@Alejandro\_Alaco](https://forum.inductiveautomation.com/u/Alejandro_Alaco)\
**Post date:** [January 29, 2026, 12:16pm UTC](https://forum.inductiveautomation.com/t/timer-script-com-inductiveautomation-ignition-common-script-imm-object-has-no-attribute-ws/113626/8 "2026-01-29T12:16:05Z")

</div>

Would it help if I use bacck-up of gateway before I got the error ?

---

<div class="post-metadata">

**Author:** ![bschroeder](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/bschroeder/32/13260_2.png) [@bschroeder](https://forum.inductiveautomation.com/u/bschroeder)\
**Post date:** [January 29, 2026, 12:20pm UTC](https://forum.inductiveautomation.com/t/timer-script-com-inductiveautomation-ignition-common-script-imm-object-has-no-attribute-ws/113626/9 "2026-01-29T12:20:55Z")

</div>

I don't know. I have not seen the script.

We aren't magicians, and that error is pointing to a specific error in your script. If you can't provide the script that is causing issues so we can help you decipher what is going on, all you are doing it guessing at the issue and not fixing it.

EDIT  
What is the actual problem you are trying to solve? You started with an error in a timer script, and then you provided what seems to be script from a perspective view. They might be related, but what are you trying to fix?

---

<div class="post-metadata">

**Author:** ![Alejandro\_Alaco](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/alejandro_alaco/32/59849_2.png) [@Alejandro\_Alaco](https://forum.inductiveautomation.com/u/Alejandro_Alaco)\
**Post date:** [January 29, 2026, 12:32pm UTC](https://forum.inductiveautomation.com/t/timer-script-com-inductiveautomation-ignition-common-script-imm-object-has-no-attribute-ws/113626/10 "2026-01-29T12:32:39Z")

</div>

Now i cant open projects on my Ignition client, so I guess just doing backup of the gateway will go to previous point so I could open at least older projects.

---

<div class="post-metadata">

**Author:** ![JVDM](https://avatars.discourse-cdn.com/v4/letter/j/ac8455/32.png) [@JVDM](https://forum.inductiveautomation.com/u/JVDM)\
**Post date:** [January 29, 2026, 1:07pm UTC](https://forum.inductiveautomation.com/t/timer-script-com-inductiveautomation-ignition-common-script-imm-object-has-no-attribute-ws/113626/11 "2026-01-29T13:07:30Z")

</div>

> [@Alejandro\_Alaco](#):
>
> `Caused by: org.python.core.PyException: TypeError: str indices must be integers`

One way to get this error, is the following:

```python
path = "[your]tag/path"
config = system.tag.getConfiguration(path)
print config['name']

```

getConfiguration returns a list, so you must read the first item through config[0].

I however cannot verify this, because i can’t see what line 67 is in your code. Please share that piece of code, or start looking there.

---

<div class="post-metadata">

**Author:** ![lrose](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/lrose/32/62724_2.png) [@lrose](https://forum.inductiveautomation.com/u/lrose)\
**Post date:** [January 29, 2026, 1:24pm UTC](https://forum.inductiveautomation.com/t/timer-script-com-inductiveautomation-ignition-common-script-imm-object-has-no-attribute-ws/113626/12 "2026-01-29T13:24:00Z")

</div>

> [@Alejandro\_Alaco](#):
>
> at com.inductiveautomation.iosession.socket.AsyncSocketIOSession.run(AsyncSocketIOSession.java:74)

This pretty much means nothing to an end user, it's just part of the stack trace. The important part of a stack trace are the lines that start with `Caused by:` In this case you have a timer script running which is called `Copy_Of_Version-12_5-01-08-25/MAX_DNF_KW`. In that timer script on line 6 you are calling a function comprobarGuardado. In that file on line 61 you are trying to access a list element with a string which can not be converted to an integer.

> [@Alejandro\_Alaco](#):
>
> the last piece of code I was running:

This code does not match the stack trace you provided. We know this because the stack trace calls out a Gateway Timer script, but the code you provided uses `self.getSibling()` which is not available in a Gateway Timer script.

The error you proivided in your OP also doesn't match the stack trace you provided. That error looks like you may be having network issues, in which case I would not expect a backup to correct the issue.

---

<div class="post-metadata">

**Author:** ![Alejandro\_Alaco](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/alejandro_alaco/32/59849_2.png) [@Alejandro\_Alaco](https://forum.inductiveautomation.com/u/Alejandro_Alaco)\
**Post date:** [January 29, 2026, 1:32pm UTC](https://forum.inductiveautomation.com/t/timer-script-com-inductiveautomation-ignition-common-script-imm-object-has-no-attribute-ws/113626/13 "2026-01-29T13:32:18Z")

</div>

Yes, exact that, was a network issue, I just was able to open the project.

Thanks everyone for your answers @bschroeder@JVDM and @lrose

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

I didnt need to do any backups and can keep working fluently without any issues.
