Пример #1
0
    def get_mqtt_functions(self, type_):
        functions = []
        template = '.. mqtt:function:: request/{struct_name}/<UID>/{func_name}\n\n{meta_table}{desc}\n'

        for packet in self.get_packets('function'):
            if packet.get_doc_type() != type_ or packet.is_virtual():
                continue

            skip = -2 if packet.has_high_level() else 0
            name = packet.get_mqtt_name(skip=skip)
            meta = packet.get_formatted_element_meta(lambda element, cardinality=None: element.get_mqtt_type(for_doc=True, cardinality=cardinality),
                                                     lambda element, index=None: element.get_name(index=index).under,
                                                     parameter_label_override={'en': 'Request', 'de': 'Anfrage'},
                                                     return_label_override={'en': 'Response', 'de': 'Antwort'},
                                                     no_in_value={'en': 'empty payload', 'de': 'keine Nutzdaten'},
                                                     no_out_value={'en': 'no response', 'de': 'keine Antwort'},
                                                     constants_hint_override={'en': ('See symbols', 'with symbols'), 'de': ('Siehe Symbole', 'mit Symbolen')},
                                                     explicit_string_cardinality=True,
                                                     explicit_variable_stream_cardinality=True,
                                                     explicit_fixed_stream_cardinality=True,
                                                     explicit_common_cardinality=True,
                                                     high_level=True)

            if packet.get_name().space == 'Get Identity':
                meta += common.format_simple_element_meta([('_display_name', 'string', None, 'out')],
                                                          return_label_override={'en': 'Response', 'de': 'Antwort'})

            meta_table = common.make_rst_meta_table(common.merge_meta_sections(meta))
            desc = packet.get_mqtt_formatted_doc()

            if packet.get_name().under == 'get_identity':
                get_id_desc = {
                    'en': """If symbolic output is not disabled, the device identifier is mapped to the corresponding name in the format used in topics.

 The display name contains the {}'s name in a human readable form.""",
                    'de': """Falls die symbolische Ausgabe nicht deaktiviert wurde, wird der Device Identifier auf den entsprechenden Namen im Format, welches die Topics verwenden, abgebildet.

 Der Display Name enthält den Anzeigenamen des {}."""
                }

                desc += common.select_lang(get_id_desc).format(self.get_short_display_name())

            functions.append(template.format(struct_name=self.get_mqtt_device_name(),
                                             func_name=name,
                                             meta_table=meta_table,
                                             desc=desc))

        return ''.join(functions)
Пример #2
0
    def get_openhab_configuration(self):
        meta_table_entries = []

        meta_table_entries.append(
            ('plain', 'UID', 'tinkerforge:{device_lower}:[UID]'.format(
                device_lower=self.get_thing_type_name())))
        meta_table_entries.append(('plain', 'Required firmware version',
                                   self.oh.required_firmware_version))
        meta_table_entries.append(
            ('plain', 'Firmware update supported',
             'yes' if self.oh.firmware_update_supported else 'no'))

        channels = [
            unescape('<a href="#{device}::{label}">{label}</a>'.format(
                label=c.get_label(), device=self.get_java_class_name()))
            for c in self.oh.channels
        ]
        meta_table_entries.append(('plain', 'Channels', channels))

        actions = [
            unescape('<a href="#{0}::{2}{1}">{1}</a>'.format(
                self.get_java_class_name(),
                a.fn.get_name(skip=-2 if a.fn.has_high_level() else 0).camel,
                self.get_category().headless + self.get_name().camel))
            for a in self.oh.actions
        ]
        meta_table_entries.append(('plain', 'Actions', actions))

        if self.oh.params is not None:
            meta_table_entries += self.get_openhab_param_entries(
                self.oh.params)

        desc = """.. _{0}_openhab_api:

Thing
-----

"""

        return desc.format(
            self.get_name().under + '_' +
            self.get_category().under) + common.make_rst_meta_table(
                common.merge_meta_sections(meta_table_entries))
Пример #3
0
    def get_openhab_channels(self):

        #functions = []
        channels = []
        template = '.. openhab:channel:: {device}::{label}\n\n{desc}\n\n{meta_table}\n\n'
        description = {
            'de': """
.. _{0}_openhab_channels:

Channel
-------

""",
            'en': """
.. _{0}_openhab_channels:

Channels
--------

"""
        }
        #cls = self.get_java_class_name()

        for c in self.oh.channels:
            meta_table_entries = []
            item_type = c.type.item_type
            if item_type == 'Color':
                item_type += ' - Only HSBType commands are accepted. Updating the brightness without changing the hue (e.g. by sending a PercentType) may fail.'

            meta_table_entries.append(
                ('plain', 'UID',
                 'tinkerforge:{device_lower}:[UID]:{channel_camel}'.format(
                     device_lower=self.get_thing_type_name(),
                     channel_camel=c.id.camel,
                 )))
            meta_table_entries.append(
                ('plain', 'Read only', 'Yes' if c.type.read_only else 'No'))
            if c.predicate != 'true':
                meta_table_entries.append(
                    ('plain', 'Predicate',
                     common.select_lang(c.predicate_description)))

            if c.type.options is not None:
                item_type = 'Choice'
                meta_table_entries.append(
                    ('plain', 'Options',
                     ', '.join([name for name, value in c.type.options])))
            elif c.type.command_options is not None:
                item_type = 'Commands ({})'.format(item_type)
                meta_table_entries.append(
                    ('plain', 'Commands',
                     [x[0] for x in c.type.command_options]
                     if len(c.type.command_options) > 1 else
                     'Accepts any string'))
            elif c.type.is_trigger_channel:
                item_type = 'Trigger ({})'.format(c.type.id.space)

            meta_table_entries.insert(0, ('plain', 'Type', item_type))

            desc = c.get_description().replace('|', '\|')

            if '<ul>' in desc:
                desc = desc.replace('<ul>',
                                    '\n\n').replace('<li>', '* ').replace(
                                        '</li>', '\n').replace('</ul>', '')

            if not c.automatic_update:
                desc += '\n\nThis channel will only update after the configured update interval, not on changed values.'

            unit_name = ''
            if c.java_unit is not None and c.java_unit != 'SmartHomeUnits.ONE':
                unit_name = ' ' + c.java_unit.split('.')[1].replace(
                    '_', ' ').title().replace('Metre', 'Meter')
                meta_table_entries.append(('plain', 'Unit', unit_name))

            if c.type.min is not None and c.type.max is not None:
                if c.type.step is not None:
                    s = '{min}{unit} to {max}{unit} (Step {step}{unit})'.format(
                        min=c.type.min,
                        max=c.type.max,
                        unit=common.wrap_non_empty(' ', unit_name, ''),
                        step=c.type.step)
                else:
                    s = '{min}{unit} to {max}{unit}'.format(
                        min=c.type.min,
                        max=c.type.max,
                        unit=common.wrap_non_empty(' ', unit_name, ''))
                meta_table_entries.append(('plain', 'Range', s))

            if c.type.params is not None:
                meta_table_entries += self.get_openhab_param_entries(
                    c.type.params)

            channels.append(
                template.format(
                    device=self.get_java_class_name(),
                    label=c.get_label(),
                    meta_table=common.make_rst_meta_table(
                        common.merge_meta_sections(meta_table_entries)),
                    desc=desc))
        return common.select_lang(description).format(
            self.get_doc_rst_ref_name()) + '\n\n'.join(channels)