If I correctly understand the end result, I believe Revit will do exactly what you want out of the box without any add-in program. What you are talking about is a schedule with possibly an embedded schedule to break out details. It may be that you want to automate the device data entry (i.e. what model number, manufacturer, etc.) from an external file. I do not think you need to involve anything dealing with Annotation. Annotation ("tag") is typically set up to display information it finds contained as data within the item it is associated with. In other words it automatically displays what it is setup to display. Your add-in might populate the device instances with the correct specific data. The Revit schedule would automatically reflect that data and so also would the annotation associated with any device instance. You would need to first develop the scheme details. Starting with each device instance you would need to decide what device differences (the manufacturer for a particular initiating device for example) are handled as shared parameters in different family types or are handled as shared instance parameters in a family type. The data needs to be a shared parameter because the annotation and the schedule have no way of knowing about a non-builtin piece of data to find without a common association key. The shared parameter file provides that key value.
Your add-in could find the family device instances and reset the instance family type (referred to as FamilySymbol, not type.) if the chosen scheme involves changing the family instance type (FamilySymbol). It can also change the values of the parameters in those device family instances. If your scheme also involves manipulating the Annotation (tag) that might be associated, say by either changing the family instance or changing the family type (FamilySymbol) in the family instance, then you should know that there are methods that return a family instances's associated tags or the other way around. You can change the tag that was used and you can change the type (FamilySymbol) within the tag. I would think you want to make the scheme as simple as possible. If this is a typical fire alarm system, you really have only a device summary table and devices shown with their circuit numbers and possibly a unique id. The unique id is the kicker.
The Revit interface, and I'll blame it on Windows going to the Ribbon interface years ago, is not specific task oriented. It serves only broad tasks. So for example many user steps are involved to simply place a fire alarm device with its tag. It should be a two pick process (not including the command start). The command start should already know the device, its data, its tag type, how the tag should be and so on. All that is needed is where the device is placed on the screen and where the annotation (tag) goes. That is two points total. I can provide something like that that if that is part of what you are wanting to do.
Good luck.