diff --git a/power_mqtt1.py b/power_mqtt1.py
index bb87206..9527d5e 100755
--- a/power_mqtt1.py
+++ b/power_mqtt1.py
@@ -4,14 +4,10 @@ import smbus
 import time
 import paho.mqtt.client as mqt
 from datetime import datetime
-from datetime import timedelta
 
 bus = smbus.SMBus(1)
 mqtc = mqt.Client()
 
-
-
-
 access = {}
 # [ code : [last_access, penalty] ]
 
@@ -34,16 +30,6 @@ def millis_since(start_time):
     ms = (dt.days * 24 * 60 * 60 + dt.seconds) * 1000 + dt.microseconds / 1000.0
     return ms
 
-
-
-# Settings for connection
-host = "10.42.0.244"
-topic= "foobar/oben/licht"
-port = 1883
-
-# Callbacks
-rc = 0
-
 def on_connect(mosq, obj, foo ,bar ):
     print( "Connected" )
 
@@ -54,22 +40,6 @@ def on_message(mosq, obj, msg):
 def on_subscribe(mosq, obj, mid, granted_qos):
     print("Subscribed OK")
 
-# Set callbacks
-mqtc.on_message = on_message
-mqtc.on_connect = on_connect
-mqtc.on_subscribe = on_subscribe
-
-# Connect and subscribe
-
-def init_mqtt():
-    mqtc.connect(host, port, 60)
-    mqtc.subscribe(topic, 0)
-    rc  = 0
-    while rc == 0:
-        rc = mqtc.loop()
-
-
-
 #Funktion Setze Bit in Variable / Function Set Bit in byte
 def set_bit(value, bit):
     return value | (1<<bit)
@@ -78,6 +48,28 @@ def set_bit(value, bit):
 def clear_bit(value, bit):
     return value & ~(1<<bit)
 
+def i2c_status_thread():
+    global state
+    #ports = (0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F)
+    #         bael loun cant flur
+    #         leba e    ina
+    #         d
+    names = { "flur", "baellebad", "lounge-front", "lounge-back", "baellebad-ein", "lounge-ein", "cantina-ein", "zentral-aus", "cantina"}
+    ports = (0xF7,0xFF,0xFF,0xFE,0xFD,0xFF,0xFF,0xFF,0xFB)
+    inputs = (0x23,0x21)   
+    while True:
+        byte = bus.read_byte(inputs[0])
+        update = map( lambda x: 1 if (byte | x == x) else 0 , ports)
+        byte = bus.read_byte(inputs[1])
+        update[:8] = map( lambda x: 1 if (byte | x == x) else 0 , ports[:8])
+        for i,j,n in state,update,names:
+            if i != j:
+                if n in power:
+                    mqtc.publish("foobar/oben/" + n + "/strom/status", states[j], qos=0, retain=False)
+                else:
+                    mqtc.publish("foobar/oben/" + n + "/licht/status", states[j], qos=0, retain=False)
+
+        time.sleep(5)
 
 #Buttonbefehle
 def switch(i,speed=0.5):
@@ -96,40 +88,50 @@ def switch(i,speed=0.5):
             o = clear_bit(o,i)
             bus.write_byte(0x3f,255-o)
     
-
+state = [0,0,0,0,0,0,0,0,0,0]
+states = {0: "OFF", 1: "ON"}
 commands = { "flur" : 0, "baellebad" : 1, "lounge-front": 2, "lounge-back" : 3,"baellebad-ein" : 4, "lounge-ein" : 5, "cantina-ein" : 6, "zentral-aus" : 7, "cantina" : 8}
-power = { "zentral-aus" : 7 , "baellebad" : 4, "lounge" : 5, "cantina" : 6 }
+power = { "zentral" : 7 , "baellebad" : 4, "lounge" : 5, "cantina" : 6 }
 light = { "flur" : 0, "baellebad" : 1, "lounge-front" : 2, "lounge-back" : 3, "cantina" : 8 }
-state  = []
 
-def decode_topic(topic):
+
+
+# foobar/oben/lounge   /licht/action
+#             cantina  /strom/status
+#             flur
+#             baellebad
+#             zentral 
+
+def switch_state(i, state):
+    if state[i] != state: # changed
+        switch(i)
+        state[i] = state
+        return True
+    return False
+
+def decode_topic(topic, state):
     #lazy
-    parts = topic.explode("/")
-    if parts[0] == "foobar" and parts[4] == "action":
-        if parts[2] == "licht":
-            return (parts[3],lights)
-        elif parts[2] == "power":
-            return (parts[3],power)
-    return ("err", [] )
+    print("dummy")
+    list = topic.split('/')
+    if list[3] == "licht":
+        if list[2] in light:
+            if switch_state(light[list[2]], state):
+                mqtc.publish(topic.replace("action", "status"), states[state], qos=0, retain=False)
+    elif list[3] == "strom":
+        if list[2] in power:
+            if switch_state(power[list[2]], state):
+                mqtc.publish(topic.replace("action", "status"), states[state], qos=0, retain=False)
 
 def msgs(inp, topic):
     c = inp.decode("utf-8")
     l = len(c)
     # supporting number commands
     if c == "OFF" or c == "ON":
-        (name,lookup) = decode_topic(topic)
-        if name == "err":
-            return
-        switch(lookup[name])
-        if i in state:
-            if state[i] == 0:
-                state[i] = 1
-            else:
-                state[i] = 0
-        else:
-            state[i] = 1
-        #later: send status based on state[i]
-        
+        if c.find("ON") >= 0:
+            decode_topic(topic, 1)
+        elif c.find("OFF") >= 0:
+            decode_topic(topic, 0)
+        return
     elif l < 3:
         try:
             msg = int(inp)
@@ -178,8 +180,23 @@ def msgs(inp, topic):
     return
 
 
+def init_mqtt():
+    mqtc.connect("10.42.0.244", 1883, 60)
+    mqtc.subscribe("foobar/oben/licht", 0)
+    mqtc.subscribe("foobar/oben/lounge-back/licht/action", 0)
+    mqtc.subscribe("foobar/oben/lounge-front/licht/action", 0)
+    mqtc.subscribe("foobar/oben/lounge/strom/action", 0)
+    mqtc.subscribe("foobar/oben/baellebad/licht/action", 0)
+    mqtc.subscribe("foobar/oben/baellebad/strom/action", 0)
+    mqtc.subscribe("foobar/oben/cantina/licht/action", 0)
+    mqtc.subscribe("foobar/oben/cantina/strom/action", 0)
+    mqtc.subscribe("foobar/oben/flur/licht/action", 0)
+    mqtc.subscribe("foobar/oben/licht", 0)
+    mqtc.on_message = on_message
+    mqtc.on_connect = on_connect
+    mqtc.on_subscribe = on_subscribe
+    mqtc.loop_forever()
+
 init_mqtt()
-while 1:
-    time.sleep(10)
 
 # vim: noai:ts=4:sw=4