Normally when you have a device , the have a 1 device type and 1 service ID
Normally, yes, but that's a degenerate case. Imagine a remote-controlled power board, with three individually-controllable appliance switches in it. One device, three on-off services. Each service would have a "Status" variable, so how would your program get the status of switch #3?
The way it's done is that each switch has its own Service ID. Same Service type, different Service ID:
* Switch 1: Service type urn:schemas-upnp-org:service:SwitchPower:1, Service ID urn:upnp-org:serviceId:SwitchPower1
* Switch 2: Service type urn:schemas-upnp-org:service:SwitchPower:1, Service ID urn:upnp-org:serviceId:SwitchPower2
* Switch 3: Service type urn:schemas-upnp-org:service:SwitchPower:1, Service ID urn:upnp-org:serviceId:SwitchPower3
That's why you need to provide the Service ID of the variable that you're interested in. If you like, you can think of the ServiceID and VariableName as a two-part primary key. Both are needed to get or set a variable uniquely.
Go back to the Advanced tab in UI4 and hover the mouse pointer over the variable name ("Status"). Up pops some hover text. That's the service ID, and it's needed to query or set that variable's value.