Das ist sehr einfach, auch wenn ich hier noch interpretiere.
Wenn du eine spezifische Komponente eines Zählers rücksetzen willst, dann musst du das zu rücksetzende Ding angeben. Dazu ist die type Komponente im params Objekt zuständig. Ob diese type Komponente verfügbar ist, ist zielorientiert zu prüfen. Dabei dürften die Antworten des Shelly Systems helfen.
Wenn ein spezifisches Rücksetzen nicht angestrebt ist, braucht type nicht angegeben zu werden. Dann ist der Parameter params typischerweise obsolet.
Eine Id Komponente in params ist nicht zwingend, weshalb ohne type auch params entfallen kann.
Habe ich mich (objektorientiert) verständlich ausgedrückt? 
Btw, ich kenne mich mit Objektorientierung relativ gut aus. Unter einer Perspektive bedeutet dies Eigenverantwortlichkeit der Objekte. Diese stellen Kommunikationsschnittstellen zur Verfügung. Was sie mit einer Nachricht tun, bleibt den Objekten überlassen. Dieses Paradigma ist auch MQTT zu eigen. Eine Peer to Peer Kommunikation ist in MQTT nicht vorgesehen, entschuldige bitte meine Erklärungen. Wenn eine solche P2P Kommunikation erwünscht ist, müssen zusätzliche Infos in den Payloads eingepflanzt werden. Dafür ist aber MQTT nicht verantwortlich, sondern ausschließlich dessen Clients. Soll heißen:
"Ich (MQTT Broker) stelle mein schwarzes Brett zur Verfügung. Was Ihr (Clients) damit tut, bleibt euch überlassen. Wenn jemand von euch nicht erreichbar ist, kann ich das den anderen mitteilen (LWT), wenn ihr das so wollt." 