Tracking User Behavior to Influence Future Designs

We have several sites with Ignition deployed and we can see via session count that adoption is different based on location. Essentially what we can get through Ignition stock methods is Session count and in case of SSO sites, the number of distinct users.

As we evolve our designs going forward, in addition to talking to the users, it would be very beneficial to know how the users utilize the current systems, which are currently in vision. For example if we could know the amount of time each view is open, it may mean that some views are simply unnecessary and that other views which are heavily used are the most important and then focus on enriching the content of those.

I guess there are 2 target groups: to Inductive automation is this something which has been considered as part of the Ignition offering and to other Ignition users/developers have you ever created something like this for yourself, if so would you be able to share your experience?

Thanks,

Nick

You might find this useful:

https://inductiveautomation.com/moduleshowcase/module/seeq-corporation-seeq

1 Like

Coming back to this post after more than 2 years in case it can help anyone else.

What we eventually did to enable tracking how much each screen in a perspective application actually gets used was as follows:

  1. Add a Session custom property called "selectedView"
  2. On the startup script of each screen, set the name of the screen being loaded, for example:

  1. On the selectedView property, add the following change script which logs a stringified JSON to the audit log. In our case, the audit profile is in our Kafka module so the records are all sent to a central database via Kafka.
def valueChanged(self, previousValue, currentValue, origin, missedEvents):
	if previousValue != None and currentValue != None:
		secondsOnScreen = system.date.secondsBetween(
			previousValue.timestamp, 
			currentValue.timestamp
		)
		pyObj = {
			"from": previousValue.value,
			"to": currentValue.value,
			"start": previousValue.timestamp,
			"end": currentValue.timestamp,
			"secondsOnScreen": secondsOnScreen
		}
		json = system.util.jsonEncode(pyObj)
		
		system.util.audit(
			action="Screen Usage Tracking",
			actionTarget=currentValue.value,
			actionValue=json
		)

Then in the central database we can do stuff like this:

SELECT 
	actionTarget as screen, 
	COUNT(actionTarget) as usageCount 
FROM ignition.ia_audit_event iae 
WHERE action = 'Screen Usage Tracking'
GROUP BY actionTarget
ORDER BY usageCount DESC
LIMIT 20

Cheers,

Nick

8 Likes