The OpenRemote open source Java project is excellent. It is very easy to use and very reliable. It runs on most platforms including the Raspberry Pi.
I have not tried to produce a high quality user interface yet, but have experimented with several possible inerfaces.
I think the main alternatives are photographs of your house and the devices it contains (which you touch to control), or emulation of interfaces from devices such as remote controls or thermostats.
Here are some of the screens that I currently use on my Android phone or tablet: