1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- import config
- import mqtt
- import readline
- from simulation.rooms import house
- import sys
- from tests.all import test_smarthome
-
- # TODO: Extend tests in simulation
- # - Test: Check of warning messages for battery and overtemperature
- # - Switching button functions (gfw_dirk, ffe.sleep)
- # - Brightness button functions (gfw.dirk, ffe.sleep)
- # - Synch functions of amplifier with spotify, mpd
- # - Remote actions after amplifier on
- # - Heating functionality (extended: mode switch off by other function, timer)
- # - Circulation pump (Extend Timer)
- # - Stairways (Extend Motion sensor and Timer)
-
- if __name__ == "__main__":
- mc = mqtt.mqtt_client(host=config.MQTT_SERVER, port=config.MQTT_PORT, username=config.MQTT_USER,
- password=config.MQTT_PASSWORD, name=config.APP_NAME + '_simulation')
- #
- COMMANDS = ['quit', 'help']
- #
- h = house(mc)
- for name in h.getmembers():
- d = h.getobjbyname(name)
- for c in d.capabilities():
- COMMANDS.append(name + '.' + c)
- #
- ts = test_smarthome(h, mc)
- for name in ts.getmembers():
- d = ts.getobjbyname(name)
- for c in d.capabilities():
- COMMANDS.append('test.' + name + '.' + c)
-
- def reduced_list(text):
- """
- Create reduced completation list
- """
- reduced_list = {}
- for cmd in COMMANDS:
- next_dot = cmd[len(text):].find('.')
- if next_dot >= 0:
- reduced_list[cmd[:len(text) + next_dot + 1]] = None
- else:
- reduced_list[cmd] = None
- return reduced_list.keys()
-
- def completer(text, state):
- """
- Our custom completer function
- """
- options = [x for x in reduced_list(text) if x.startswith(text)]
- return options[state]
-
- def complete(text, state):
- for cmd in COMMANDS:
- if cmd.startswith(text):
- if not state:
- hit = ""
- index = 0
- sub_list = cmd.split('.')
- while len(text) >= len(hit):
- hit += sub_list[index] + '.'
- return hit # cmd
- else:
- state -= 1
-
- if len(sys.argv) == 1:
- readline.parse_and_bind("tab: complete")
- readline.set_completer(completer)
- print("\nEnter command: ")
- while True:
- userfeedback = input('')
- command = userfeedback.split(' ')[0]
- if userfeedback == 'quit':
- break
- elif userfeedback == 'help':
- print("Help is not yet implemented!")
- elif userfeedback.startswith("test"):
- ts.command(userfeedback)
- elif command in COMMANDS[2:]:
- h.command(userfeedback)
- elif userfeedback != "":
- print("Unknown command!")
- else:
- print()
- else:
- cmd = sys.argv[1]
- if cmd.startswith('test'):
- ts.command(cmd)
- else:
- h.command(cmd)
-
- ts.close()
|