예제 #1
0
def add_network():
    # First get the list of adapters
    response = nymea.send_command("Zigbee.GetAdapters", {})
    if len(response['params']['adapters']) == 0:
        print "There are no adapters available."
        return None

    adapterList = [];
    for adapter in response['params']['adapters']:
        adapterList.append("%s (%s) - %s" % (adapter['description'], adapter['serialPort'], adapter['name']))

    selection = nymea.get_selection("Please select a device descriptor", adapterList)
    selectedAdapter = {}
    if selection != None:
        selectedAdapter = response['params']['adapters'][selection]
    else:
        print "ERROR: invalid adapter selection."
        return None

    print("Selected adapter:")
    nymea.print_json_format(selectedAdapter)
    params = {}
    params["serialPort"] = selectedAdapter["serialPort"]
    params["baudRate"] = selectedAdapter["baudRate"]
    params["backend"] = selectedAdapter["backend"]
    response = nymea.send_command("Zigbee.AddNetwork", params)
    print("Add network returned %s" % response["params"]["zigbeeError"])
    if response["params"]["zigbeeError"] == "ZigbeeErrorNoError":
        print("New network has the uuid %s" % response["params"]["networkUuid"])
예제 #2
0
def connect_wifi():
    interface = selectWirelessInterface()
    if interface is None:
        print "There is no wireless interface available"
        return

    params = {}
    params['interface'] = interface
    wifiNetworks = []
    wifiNetworkStrings = []
    response = nymea.send_command("NetworkManager.GetWirelessAccessPoints",
                                  params)
    wifiNetworks = response['params']['wirelessAccessPoints']
    for accessPoint in wifiNetworks:
        wifiNetworkStrings.append(
            ("%10s | %s%s | %s %s | %s" %
             (accessPoint['ssid'], accessPoint['signalStrength'], '%',
              accessPoint['frequency'], '[GHz]', accessPoint['macAddress'])))

    selection = selector.get_selection("Wifi access points",
                                       wifiNetworkStrings)
    if not selection:
        return None

    params['ssid'] = wifiNetworks[selection]['ssid']
    if wifiNetworks[selection]['protected'] == True:
        params['password'] = raw_input(
            "Please enter the password for wifi network %s: " %
            (params['ssid']))

    response = nymea.send_command("NetworkManager.ConnectWifiNetwork", params)
    nymea.print_networkmanager_error_code(
        response['params']['networkManagerError'])
예제 #3
0
파일: rules.py 프로젝트: sleewis/nymea-cli
def execute_rule_actions():
    ruleDescription = select_rule()
    if ruleDescription == None:
        print "\n    No rules found"
        return None
    ruleId = ruleDescription['id']
    params = {}
    params['ruleId'] = ruleId

    rule = nymea.send_command("Rules.GetRuleDetails", params)['params']['rule']

    if len(rule['exitActions']) == 0:
        options = ["Execute actions"]
        selection = nymea.get_selection(
            "Which actions of the rule should be executed?", options)
        response = nymea.send_command("Rules.ExecuteActions", params)
        nymea.print_rule_error_code(response['params']['ruleError'])
    else:
        options = ["Execute actions", "Execute exit actions"]
        selection = nymea.get_selection(
            "Which actions of the rule should be executed?", options)
        if selection == None:
            return None

        if (options[selection] == "Execute actions"):
            response = nymea.send_command("Rules.ExecuteActions", params)
            nymea.print_rule_error_code(response['params']['ruleError'])
        else:
            response = nymea.send_command("Rules.ExecuteExitActions", params)
            nymea.print_rule_error_code(response['params']['ruleError'])

    return None
예제 #4
0
def add_discovered_device(deviceClassId, deviceDescriptorId):
    deviceClass = get_deviceClass(deviceClassId)
    if deviceClass['setupMethod'] == "SetupMethodJustAdd":
        params = {}
        params['deviceClassId'] = deviceClassId
        params['deviceDescriptorId'] = deviceDescriptorId
        params['name'] = raw_input("\nEnter the \"name\" of the device: ")
        response = nymea.send_command("Devices.AddConfiguredDevice", params)
        if not response['status'] != "success":
            nymea.print_device_error_code(response['params']['deviceError'])
        else:
            print "Device added successfully. Device ID: %s\n" % response[
                'params']['deviceId']
    elif deviceClass['setupMethod'] == "SetupMethodPushButton":
        params = {}
        params['deviceClassId'] = deviceClassId
        params['deviceDescriptorId'] = deviceDescriptorId
        params['name'] = raw_input("\nEnter the \"name\" of the device: ")
        response = nymea.send_command("Devices.PairDevice", params)
        #nymea.print_json_format(response)
        if not response['status'] == "success":
            print "Pairing failed: %s", response['params']['deviceError']
            return
        print "\nPairing device %s\n\n%s\n\n" % (
            deviceClass['displayName'], response['params']['displayMessage'])
        if response['params']['setupMethod'] == "SetupMethodPushButton":
            raw_input("\nPress \"enter\" to confirm\n")
        params = {}
        params['pairingTransactionId'] = response['params'][
            'pairingTransactionId']
        response = nymea.send_command("Devices.ConfirmPairing", params)
        nymea.print_device_error_code(response['params']['deviceError'])
    elif deviceClass['setupMethod'] == "SetupMethodDisplayPin":
        params = {}
        params['deviceClassId'] = deviceClassId
        params['deviceDescriptorId'] = deviceDescriptorId
        params['name'] = raw_input("\nEnter the \"name\" of the device: ")
        response = nymea.send_command("Devices.PairDevice", params)
        #nymea.print_json_format(response)
        if not response['status'] == "success":
            print "Pairing failed: %s", response['params']['deviceError']
            return
        print "\nPairing device %s\n\n%s\n\n" % (
            deviceClass['displayName'], response['params']['displayMessage'])
        if response['params']['setupMethod'] == "SetupMethodDisplayPin":
            pin = raw_input("Pin: ")
        params = {}
        params['secret'] = pin
        params['pairingTransactionId'] = response['params'][
            'pairingTransactionId']
        response = nymea.send_command("Devices.ConfirmPairing", params)
        nymea.print_device_error_code(response['params']['deviceError'])
예제 #5
0
def edit_device():
    deviceId = select_configured_device()
    params = {}
    params['deviceId'] = deviceId
    params['name'] = raw_input("\nEnter the new \"name\" of the device: ")
    response = nymea.send_command("Devices.EditDevice", params)
    nymea.print_device_error_code(response['params']['deviceError'])
예제 #6
0
파일: rules.py 프로젝트: sleewis/nymea-cli
def list_rule_details():
    ruleDescription = select_rule()
    if ruleDescription == None:
        print "\n    No rules found"
        return None
    params = {}
    params['ruleId'] = ruleDescription['id']
    rule = nymea.send_command("Rules.GetRuleDetails", params)['params']['rule']
    print nymea.print_json_format(rule)
    nymea.debug_stop()
    print "========================================================"
    print "-> Details for rule \"%s\" (%s):\n" % (rule['name'], rule['id'])
    print "Rule is %s" % (print_rule_enabled_status(bool(rule['enabled'])))
    print "Rule is %s" % (print_rule_active_status(bool(rule['active'])))
    print "Rule is %s" % (print_rule_executable_status(bool(
        rule['executable'])))

    print "\nTimeDescriptor:\n"
    timedescriptor.printTimeDescriptor(rule['timeDescriptor'])

    if len(rule['eventDescriptors']) > 0:
        print "\nEvents:\n"
        events.print_eventDescriptors(rule['eventDescriptors'])

    if rule['stateEvaluator']:
        print "\nStates:\n",
        states.print_stateEvaluator(rule['stateEvaluator'])
    print "\nActions:\n"
    ruleactions.print_ruleActionList(rule['actions'])
    if len(rule['exitActions']) > 0:
        print "\nExit actions:\n"
        ruleactions.print_ruleActionList(rule['exitActions'])
예제 #7
0
def get_actionType(actionTypeId):
    params = {}
    params['actionTypeId'] = actionTypeId
    response = nymea.send_command("Actions.GetActionType", params)
    if not 'actionType' in response['params']:
        return None
    return response['params']['actionType']
예제 #8
0
def list_logEntries():
    params = {}
    lines = []
    response = nymea.send_command("Logging.GetLogEntries", params)
    for i in range(len(response['params']['logEntries'])):
        line = get_log_entry_line(response['params']['logEntries'][i])
        print line
예제 #9
0
def discover_device(deviceClassId=None):
    if deviceClassId == None:
        deviceClassId = select_deviceClass()
    deviceClass = get_deviceClass(deviceClassId)
    if not deviceClass:
        return None
    params = {}
    params['deviceClassId'] = deviceClassId
    discoveryParams = parameters.read_params(
        deviceClass['discoveryParamTypes'])
    if len(discoveryParams) > 0:
        params['discoveryParams'] = discoveryParams
    print "\ndiscovering..."
    response = nymea.send_command("Devices.GetDiscoveredDevices", params)
    if not 'deviceDescriptors' in response['params']:
        print "no devices found"
    deviceDescriptorList = []
    deviceDescriptorIdList = []
    for deviceDescriptor in response['params']['deviceDescriptors']:
        deviceDescriptorList.append(
            "%s (%s)" %
            (deviceDescriptor['title'], deviceDescriptor['description']))
        deviceDescriptorIdList.append(deviceDescriptor['id'])
    if not deviceDescriptorIdList:
        print "\n    Timeout: no device found."
        return None
    selection = nymea.get_selection("Please select a device descriptor",
                                    deviceDescriptorList)
    if selection != None:
        return deviceDescriptorIdList[selection]
    return None
예제 #10
0
def get_stateType(stateTypeId):
    params = {}
    params['stateTypeId'] = stateTypeId
    response = nymea.send_command("States.GetStateType", params)
    if "stateType" in response['params']:
        return response['params']['stateType']
    return None
예제 #11
0
def show_network_status():
    params = {}
    response = nymea.send_command("NetworkManager.GetNetworkStatus", params)
    if 'status' in response['params']:
        nymea.print_json_format(response['params']['status'])
    else:
        nymea.print_networkmanager_error_code(
            response['params']['networkManagerError'])
예제 #12
0
def cloud_authenticate():
    params = {}
    params['username'] = raw_input(
        "\nEnter the \"username\" of your cloud account: ")
    params['password'] = raw_input(
        "\nEnter the \"password\" of your cloud account: ")
    response = nymea.send_command("Cloud.Authenticate", params)
    nymea.print_cloud_error_code(response['params']['cloudError'])
예제 #13
0
def get_log_entry_lines():
    global logFilter
    lines = []
    response = nymea.send_command("Logging.GetLogEntries", logFilter)
    for i in range(len(response['params']['logEntries'])):
        line = get_log_entry_line(response['params']['logEntries'][i])
        lines.append(line)
    return lines
예제 #14
0
파일: rules.py 프로젝트: sleewis/nymea-cli
def get_rule_description(ruleId):
    ruleDescriptions = []
    ruleDescriptions = nymea.send_command("Rules.GetRules",
                                          {})['params']['ruleDescriptions']
    for ruleDescription in ruleDescriptions:
        if ruleDescription['id'] == ruleId:
            return ruleDescription
    return None
예제 #15
0
def list_available_adapters():
    params = {}
    response = nymea.send_command("Zigbee.GetAdapters", params)
    if len(response['params']['adapters']) == 0:
        print "There are no adapters available."
        return None

    nymea.print_json_format(response['params'])
예제 #16
0
파일: events.py 프로젝트: sleewis/nymea-cli
def get_eventTypes(deviceClassId):
    params = {}
    params['deviceClassId'] = deviceClassId
    eventTypes = nymea.send_command("Devices.GetEventTypes",
                                    params)['params']['eventTypes']
    if eventTypes:
        return eventTypes
    return None
예제 #17
0
def get_stateTypes(deviceClassId):
    params = {}
    params['deviceClassId'] = deviceClassId
    response = nymea.send_command("Devices.GetStateTypes", params)
    if "stateTypes" in response['params']:
        return response['params']['stateTypes']
    else:
        return None
예제 #18
0
파일: rules.py 프로젝트: sleewis/nymea-cli
def enable_disable_rule():
    ruleDescription = select_rule()
    if ruleDescription == None:
        print "\n    No rules found"
        return
    actionTypes = ["enable", "disable"]
    selection = nymea.get_selection("What do you want to do with this rule: ",
                                    actionTypes)
    if selection == 0:
        params = {}
        params['ruleId'] = ruleDescription['id']
        response = nymea.send_command("Rules.EnableRule", params)
        nymea.print_rule_error_code(response['params']['ruleError'])
    else:
        params = {}
        params['ruleId'] = ruleDescription['id']
        response = nymea.send_command("Rules.DisableRule", params)
        nymea.print_rule_error_code(response['params']['ruleError'])
예제 #19
0
파일: rules.py 프로젝트: sleewis/nymea-cli
def remove_rule():
    ruleDescription = select_rule()
    if ruleDescription == None:
        print "\n    No rule found"
        return None
    params = {}
    params['ruleId'] = ruleDescription['id']
    response = nymea.send_command("Rules.RemoveRule", params)
    nymea.print_rule_error_code(response['params']['ruleError'])
예제 #20
0
def set_language():
    params = {}
    languages = get_languages()
    selection = nymea.get_selection(
        "Please select one of following allowed values:", languages)
    if selection == None:
        return None

    params['language'] = languages[selection]
    response = nymea.send_command("Configuration.SetLanguage", params)
    nymea.print_json_format(response['params'])
예제 #21
0
def scan_wirelessaccesspoints():
    interface = selectWirelessInterface()
    if interface is None:
        print "There is no wireless interface available"
        return

    params = {}
    params['interface'] = interface
    response = nymea.send_command("NetworkManager.ScanWifiNetworks", params)
    nymea.print_networkmanager_error_code(
        response['params']['networkManagerError'])
예제 #22
0
def disconnect_networkdevice():
    interface = selectWirelessInterface()
    if interface is None:
        print "There is no wireless interface available"
        return

    params = {}
    params['interface'] = interface
    response = nymea.send_command("NetworkManager.DisconnectInterface", params)
    nymea.print_networkmanager_error_code(
        response['params']['networkManagerError'])
예제 #23
0
def set_debug_server_interface():
    params = {}
    enabled = selector.getYesNoSelection(
        "Should the debug server interface be enabled?")
    if enabled == None:
        return None

    params['enabled'] = enabled
    response = nymea.send_command("Configuration.SetDebugServerEnabled",
                                  params)
    nymea.print_json_format(response['params'])
예제 #24
0
def add_configured_device(deviceClassId):
    deviceClass = get_deviceClass(deviceClassId)
    params = {}
    params['deviceClassId'] = deviceClassId
    params['name'] = raw_input("\nEnter the \"name\" of the device: ")
    deviceParams = parameters.read_params(deviceClass['paramTypes'])
    if deviceParams:
        params['deviceParams'] = deviceParams
    print "\nAdding device with params:", nymea.print_json_format(params)
    response = nymea.send_command("Devices.AddConfiguredDevice", params)
    nymea.print_device_error_code(response['params']['deviceError'])
예제 #25
0
def remove_network():
    selectedNetwork = selectNetwork("Please select the network you want to remove")
    if selectedNetwork is None:
        return None

    print("Selected network:")
    nymea.print_json_format(selectedNetwork)
    params = {}
    params["networkUuid"] = selectedNetwork["networkUuid"]
    response = nymea.send_command("Zigbee.RemoveNetwork", params)
    print("Remove network returned %s" % response["params"]["zigbeeError"])
예제 #26
0
def set_timezone():
    params = {}
    timeZones = []
    timeZones = get_timezones()
    selection = nymea.get_selection(
        "Please select one of following allowed values:", timeZones)
    if selection == None:
        return None

    params['timeZone'] = timeZones[selection]
    response = nymea.send_command("Configuration.SetTimeZone", params)
    nymea.print_json_format(response['params'])
예제 #27
0
def enable_cloud_connection():
    params = {}
    options = ["enable", "disable"]
    selection = nymea.get_selection(
        "Do you want to do with the cloud connection: ", options)
    if selection == 0:
        params['enable'] = True
    else:
        params['enable'] = False

    response = nymea.send_command("Cloud.Enable", params)
    nymea.print_json_format(response['params'])
예제 #28
0
파일: rules.py 프로젝트: sleewis/nymea-cli
def list_rules():
    response = nymea.send_command("Rules.GetRules", {})
    if not response['params']['ruleDescriptions']:
        print "\n    No rules found. \n"
        return None
    print "-> List of configured Rules:\n"
    for i in range(len(response['params']['ruleDescriptions'])):
        ruleDescription = response['params']['ruleDescriptions'][i]
        print "%20s ( %s ) -> %s / %s" % (
            ruleDescription['name'], ruleDescription['id'],
            print_rule_enabled_status(bool(ruleDescription['enabled'])),
            print_rule_active_status(bool(ruleDescription['active'])))
예제 #29
0
def permit_join_network():
    selectedNetwork = selectNetwork("Please select the network you want to allow/deny joining nodes")
    if selectedNetwork is None:
        return None

    print("Selected network:")
    timeout = int(raw_input("Please enter the duration (0 - 255 seconds) for how long the network should be open (0 for closing it): "))
    params = {}
    params["duration"] = timeout
    params["networkUuid"] = selectedNetwork["networkUuid"]
    response = nymea.send_command("Zigbee.SetPermitJoin", params)
    print("SetPermitJoin returned %s" % response["params"]["zigbeeError"])
예제 #30
0
def enable_networking():
    params = {}
    options = ["enable", "disable"]
    selection = nymea.get_selection("Do you want to do with the networking: ",
                                    options)
    if selection == 0:
        params['enable'] = True
    else:
        params['enable'] = False

    response = nymea.send_command("NetworkManager.EnableNetworking", params)
    nymea.print_networkmanager_error_code(
        response['params']['networkManagerError'])