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)
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))
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)