Nice ideas ^^
I dont know why it was moved from bar to programming... but it wasnt really anything to do with programming, its just that I have been working 15+ years on electric and its (almost) always that you connect main voltage to make something happen.
For example in good habbit is to route live wire first to switch and then to lamp... and if someone is connected 230 directly to lamp and using wall switch to cut '0', its kind of bad way to do it, even its working perfectly well.
in a code its nothing weird, as Im also designing automation and there is really normal to have 0 as an signal.
so its 100% just wall switch that Im bothered, ok. its 5V, but so what... But after 15 years on work and 4+ on school makes your brain melt a bit 
and just to fun of it, I have bit extra options in my buttons 
//Assing binary inputs, here you can assing witch addresses are assigned to witch ports and default value for it if needed.
//I dont recommend to assign same port twice to different gAddress, but it works most of time :D
String OutAddrBool[] = { "1/1/4" , "1/1/2" , "1/1/55" }; //Address to send telegram
int digitalIn[] = { 11 , 12 , 13 }; //port (IO pin) to read, There might be broblen if there is same port twice
int digitalInStatus[] = { -1 , -1 , -1 }; //data
int digitalInPullup[] = { HIGH , HIGH , HIGH }; // High = pullup resistor, LOW does nothing. But notice if you define pin twice, last one affect both of them
String digitalInType[] = {"impulse" , "impulse" , "impulse" }; //impulse or switch
int outAddrBoolInverted[] = {true , false , true }; //inverted mode send '1' when pin is pulled to ground, good if you use pull up resistor
unsigned long lastChange[] = {millis() , millis() , millis() }; // timer to ignore putton bounce, could also be used to refresh knx message for every 1 min etc.
int outAddrBoolSended[20] = {0}; //you may ignore this, just make sure there is more values in array than in OutAddrBool[], indicates if value is sended (impulse switch)
int outAddrBoolLastSended[20] = {0}; //you may ignore this, just make sure there is more values in array than in OutAddrBool[] in case of impulse switch we need to know what was last send state