For reference changed code below, thanks to @Dirk for his help.
value_store = get_value_store()
if item in section:
now = time()
data = section[item]
item_key = "%s" % data['writername']
previous_data = value_store.get(item_key, {}) # Default to an empty dictionary if not previously set
#################################
# Check
#################################
if data['state'] == "Stable":
yield Result(state=State.OK, summary="%s has a %s state, Last error is: %s. Writer ID: %s. Writer Instance ID: %s." % (data['writername'], data['state'], data['lasterror'], data['id'], data['instanceid']))
value_store[item_key] = {"last_state": data['state'], "timestamp": int(now)}
elif data['state'] == "In-Progress":
if data['state'] != previous_data.get('last_state'):
value_store[item_key] = {"last_state": data['state'], "timestamp": int(now)}
yield Result(state=State.OK, summary="%s has a %s state, Last error is: %s. Writer ID: %s. Writer Instance ID: %s." % (data['writername'], data['state'], data['lasterror'], data['id'], data['instanceid']))
elif previous_data.get('last_state') == data['state'] and now - previous_data.get('timestamp', 0) < warninprogress:
yield Result(state=State.OK, summary="%s has a %s state, Last error is: %s. Writer ID: %s. Writer Instance ID: %s." % (data['writername'], data['state'], data['lasterror'], data['id'], data['instanceid']))
elif now - previous_data.get('timestamp', 0) >= warninprogress and now - previous_data.get('timestamp', 0) < critinprogress and previous_data.get('last_state') == data['state']:
yield Result(state=State.WARN, summary="%s has a %s state, Last error is: %s. Writer ID: %s. Writer Instance ID: %s. This Writer is in this state since %s" % (data['writername'], data['state'], data['lasterror'], data['id'], data['instanceid'], render.datetime(int(previous_data['timestamp']))))
elif now - previous_data.get('timestamp', 0) >= critinprogress and previous_data.get('last_state') == data['state']:
yield Result(state=State.CRIT, summary="%s has a %s state, Last error is: %s. Writer ID: %s. Writer Instance ID: %s. This Writer is in this state since %s" % (data['writername'], data['state'], data['lasterror'], data['id'], data['instanceid'], render.datetime(int(previous_data['timestamp']))))
elif data['state'] == "Waiting_for_Completion":
if data['state'] != previous_data.get('last_state'):
value_store[item_key] = {"last_state": data['state'], "timestamp": int(now)}
yield Result(state=State.OK, summary="%s has a %s state, Last error is: %s. Writer ID: %s. Writer Instance ID: %s." % (data['writername'], data['state'], data['lasterror'], data['id'], data['instanceid']))
elif previous_data.get('last_state') == data['state'] and now - previous_data.get('timestamp', 0) < warnwaiting:
yield Result(state=State.OK, summary="%s has a %s state, Last error is: %s. Writer ID: %s. Writer Instance ID: %s." % (data['writername'], data['state'], data['lasterror'], data['id'], data['instanceid']))
elif now - previous_data.get('timestamp', 0) >= warnwaiting and now - previous_data.get('timestamp', 0) < critwaiting and previous_data.get('last_state') == data['state']:
yield Result(state=State.WARN, summary="%s has a %s state, Last error is: %s. Writer ID: %s. Writer Instance ID: %s. This Writer is in this state since %s" % (data['writername'], data['state'], data['lasterror'], data['id'], data['instanceid'], render.datetime(int(previous_data['timestamp']))))
elif now - previous_data.get('timestamp', 0) >= critwaiting and previous_data.get('last_state') == data['state']:
yield Result(state=State.CRIT, summary="%s has a %s state, Last error is: %s. Writer ID: %s. Writer Instance ID: %s. This Writer is in this state since %s" % (data['writername'], data['state'], data['lasterror'], data['id'], data['instanceid'], render.datetime(int(previous_data['timestamp']))))