Iirc, expires 0 is used to remove a state published before, not to publish new states.
Publishing a state that should be kept by presence server for 0 seconds makes no much sense, but maybe there are specs defining a specific behaviour in such case. If yes, point the RFC and the section. If not, then try with expires > 0 in publish and close here if all ok.