# Value changed script not firing

**URL:** <https://forum.inductiveautomation.com/t/value-changed-script-not-firing/57518>\
**Category:** Ignition\
**Tags:** ignition80, scripting\
**Created:** [March 23, 2022, 11:35am UTC](https://forum.inductiveautomation.com/t/value-changed-script-not-firing/57518 "2022-03-23T11:35:27Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![grzegorz.kaczmarczyk](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/grzegorz.kaczmarczyk/32/24167_2.png) [@grzegorz.kaczmarczyk](https://forum.inductiveautomation.com/u/grzegorz.kaczmarczyk)\
**Post date:** [March 23, 2022, 11:35am UTC](https://forum.inductiveautomation.com/t/value-changed-script-not-firing/57518/1 "2022-03-23T11:35:27Z")

</div>

Hi!

When I uncomment the prodConnection variable, the script is not firing. I don’t know where the error is and how can I diagnose Ignition scripts?

```auto
	wert = system.tag.readBlocking(["[default]St20/Pm202/ST20_PM202_UNLOADINGPRODUCT.value"])[0].value #Telegram gotowy do wyslania do MESa
	prod = system.tag.readBlocking(["[default]St20/Pm202/PisanieDoBazyProdukcyjnej.value"])[0].value #Wysylanie sygnalow do bazy produkcyjnej
	test = system.tag.readBlocking(["[default]St20/Pm202/PisanieDoBazyTestowej.value"])[0].value #Wysylanie sygnalow do bazy testowej
	testConnection = system.tag.readBlocking(["[default]AvailabilityDBTest.value"])[0].value #Polaczenie z baza testowa
    #prodConnection = system.tag.readBlocking(["[default]AvailabilityDBProd.value"])[0].value
  
	if currentValue.value == 1: #Sygnal do wyslania telegramu do bazy danych
		if test == 1: #Czy piszemy do bazy testowej i czy jest polaczenie z baza testowa 
			system.db.runUpdateQuery("INSERT INTO QMES_QOPC_IMPORT (NAME, DATUMZEIT, ZEIT_MS, WERT, STATUS) VALUES ('ST20_PM202_UNLOADINGPRODUCT', SYSDATE, 0, '%s', 0)" %(wert),"DB_TEST") #Wyslanie telegramu do bazy testowej
			system.tag.writeBlocking(["[default]St20/Pm202/WriteDone"],[1]) #Wyslanie sygnalu WriteDone
		if prod == 1: #Czy piszemy do bazy produkcyjnej i czy jest polaczenie z baza produkcyjna 
			system.db.runUpdateQuery("INSERT INTO QMES_QOPC_IMPORT (NAME, DATUMZEIT, ZEIT_MS, WERT, STATUS) VALUES ('ST20_PM202_UNLOADINGPRODUCT', SYSDATE, 0, '%s', 0)" %(wert),"DB_PROD") #Wyslanie telegramu do bazy produkcyjnej
			system.tag.writeBlocking(["[default]St20/Pm202/WriteDone"],[1]) #Wyslanie sygnalu WriteDone
		
	if currentValue.value == 0: #Wyzerowanie WriteRequest przez PLC
		system.tag.writeBlocking(["[default]St20/Pm202/WriteDone"],[0]) #Wyzerowanie WriteDone

```

---

<div class="post-metadata">

**Author:** ![Matrix\_Engineering](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/matrix_engineering/32/19781_2.png) [@Matrix\_Engineering](https://forum.inductiveautomation.com/u/Matrix_Engineering)\
**Post date:** [March 23, 2022, 11:43am UTC](https://forum.inductiveautomation.com/t/value-changed-script-not-firing/57518/2 "2022-03-23T11:43:05Z")

</div>

Siema, is that the full script? If so it is indented one tab too much, unless that was a result of copy and paste to the forum.

You can diagnose by opening your gateway status in a web browser, Status/Logs

---

<div class="post-metadata">

**Author:** ![grzegorz.kaczmarczyk](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/grzegorz.kaczmarczyk/32/24167_2.png) [@grzegorz.kaczmarczyk](https://forum.inductiveautomation.com/u/grzegorz.kaczmarczyk)\
**Post date:** [March 23, 2022, 12:04pm UTC](https://forum.inductiveautomation.com/t/value-changed-script-not-firing/57518/3 "2022-03-23T12:04:15Z")

</div>

Ok, I’ve found the error. The indentation for that line was made by 4 spaces, not 1 tab.

---

<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:** [March 23, 2022, 12:12pm UTC](https://forum.inductiveautomation.com/t/value-changed-script-not-firing/57518/4 "2022-03-23T12:12:57Z")

</div>

If I may, don’t read and write tags likes this. Do them in just one call:

```python
paths = [
	"[default]St20/Pm202/ST20_PM202_UNLOADINGPRODUCT",	#Telegram gotowy do wyslania do MESa
	"[default]St20/Pm202/PisanieDoBazyProdukcyjnej",	#Wysylanie sygnalow do bazy produkcyjnej
	"[default]St20/Pm202/PisanieDoBazyTestowej", #Wysylanie sygnalow do bazy testowej
	"[default]AvailabilityDBTest", #Polaczenie z baza testowa
	 "[default]AvailabilityDBProd.value"
]
wert, prod, test, testConnection, prodConnection = [tag.value for tag in system.tag.readBlocking(paths)]

write_paths = []
write_values = []
if currentValue.value == 1: #Sygnal do wyslania telegramu do bazy danych
	if test == 1: #Czy piszemy do bazy testowej i czy jest polaczenie z baza testowa 
		system.db.runUpdateQuery("INSERT INTO QMES_QOPC_IMPORT (NAME, DATUMZEIT, ZEIT_MS, WERT, STATUS) VALUES ('ST20_PM202_UNLOADINGPRODUCT', SYSDATE, 0, '%s', 0)" %(wert),"DB_TEST") #Wyslanie telegramu do bazy testowej
		write_paths.append("[default]St20/Pm202/WriteDone") #Wyslanie sygnalu WriteDone
		write_value.append(1)
	if prod == 1: #Czy piszemy do bazy produkcyjnej i czy jest polaczenie z baza produkcyjna 
		system.db.runUpdateQuery("INSERT INTO QMES_QOPC_IMPORT (NAME, DATUMZEIT, ZEIT_MS, WERT, STATUS) VALUES ('ST20_PM202_UNLOADINGPRODUCT', SYSDATE, 0, '%s', 0)" %(wert),"DB_PROD") #Wyslanie telegramu do bazy produkcyjnej
		write_paths.append("[default]St20/Pm202/WriteDone") #Wyslanie sygnalu WriteDone
		write_values.append(1)
	
if currentValue.value == 0: #Wyzerowanie WriteRequest przez PLC
	write_paths.append("[default]St20/Pm202/WriteDone") #Wyzerowanie WriteDone
	write_values.append(0)

if write_paths:
	system.tag.writeBlocking(write_paths, write_values)

```

Additionally, I suggest you check for qualities when reading and writing.

```python
tags = system.tag.readBlocking(paths)
bad_tags = [path for path, tag in zip(paths, tags) if tag.quality.isNotGood()]
if bad_tags:
	logger.warn("bad tag quality for {}".format(bad_tags))
wert, prod, test, testConnection = [tag.value for tag in tags]

write_return = system.tag.writeBlocking(write_paths, write_values)
bad_writes = [path for path, quality in zip(write_paths, write_return) if quality.isNotGood()]
if bad_writes:
	logger.warn("tag write failed for {}".format(bad_writes))

```

---

<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:** [March 24, 2022, 2:04pm UTC](https://forum.inductiveautomation.com/t/value-changed-script-not-firing/57518/5 "2022-03-24T14:04:28Z")

</div>

Actually, after reading the code more carefully… It can be simplified a lot, assuming a few things:  
`currentValue`, `'test` and `prod` are all booleans. If they’re not, I suggest you change that.

```python
paths = [
	"[default]St20/Pm202/ST20_PM202_UNLOADINGPRODUCT",	#Telegram gotowy do wyslania do MESa
	"[default]St20/Pm202/PisanieDoBazyProdukcyjnej",	#Wysylanie sygnalow do bazy produkcyjnej
	"[default]St20/Pm202/PisanieDoBazyTestowej", #Wysylanie sygnalow do bazy testowej
	"[default]AvailabilityDBTest", #Polaczenie z baza testowa
	"[default]AvailabilityDBProd"
]
wert, prod, test, testConnection, prodConnection = [tag.value for tag in system.tag.readBlocking(paths)]

write_paths = ["[default]St20/Pm202/WriteDone"]
if currentValue.value == 1: #Sygnal do wyslania telegramu do bazy danych
	write_values = [1]
	db = "DB_TEST" if test else "DB_PROD"
	system.db.runUpdateQuery("INSERT INTO QMES_QOPC_IMPORT (NAME, DATUMZEIT, ZEIT_MS, WERT, STATUS) VALUES ('ST20_PM202_UNLOADINGPRODUCT', SYSDATE, 0, '%s', 0)" %(wert), db) #Wyslanie telegramu do bazy testowej
else: #Wyzerowanie WriteRequest przez PLC
	write_values = [0]

system.tag.writeBlocking(write_paths, write_values)

```

Strive to make things as simple as possible, it makes debug and maintenance so much easier.
