Create Item with Channels (ModBus Text Cofiguration)

  • Platform information:
  • System Information:
    • Hardware: i3/ 12GB RAM/ 2TB Raid
    • OS: Linux 6.1.0-0.deb11.21
    • Java Runtime Environment: Docker Container
    • openHAB version: 4.0.4
  • Issue of the topic:
    I’m trying to create a thing for a Janiza UMG96PA with the corresponding channels.
    With attempt 1 in the things file I get a separate thing for each thing date (very cumbersome even when inserting it into the model as equipment), especially since I might want to add another one.
    With attempt 2 I only get one thing but no channels.

Attempt 1 modbus.thimgs

Bridge modbus:tcp:UMG96PA [ host="192.168.178.24", port=502, id=1, enableDiscovery=true ] {
    // Poller für Spannungen (Voltage)
    Bridge poller voltage [ start=19000, length=12, refresh=5000, type="input" ] {
        Thing data voltage_L1_N [ readStart="19000", readValueType="float32" ]
        Thing data voltage_L2_N [ readStart="19002", readValueType="float32" ]
        Thing data voltage_L3_N [ readStart="19004", readValueType="float32" ]
        Thing data voltage_L1_L2 [ readStart="19006", readValueType="float32" ]
        Thing data voltage_L2_L3 [ readStart="19008", readValueType="float32" ]
        Thing data voltage_L3_L1 [ readStart="19010", readValueType="float32" ]
    }
    // Poller für Ströme (Current)
    Bridge poller current [ start=19012, length=8, refresh=5000, type="input" ] {
        Thing data current_L1 [ readStart="19012", readValueType="float32" ]
        Thing data current_L2 [ readStart="19014", readValueType="float32" ]
        Thing data current_L3 [ readStart="19016", readValueType="float32" ]
        Thing data vector_sum_current [ readStart="19018", readValueType="float32" ]
    }
    // Poller für Wirkleistung (Real Power)
    Bridge poller real_power [ start=19020, length=8, refresh=5000, type="input" ] {
        Thing data real_power_L1 [ readStart="19020", readValueType="float32" ]
        Thing data real_power_L2 [ readStart="19022", readValueType="float32" ]
        Thing data real_power_L3 [ readStart="19024", readValueType="float32" ]
        Thing data sum_real_power [ readStart="19026", readValueType="float32" ]
    }
    // Poller für Scheinleistung (Apparent Power)
    Bridge poller apparent_power [ start=19028, length=8, refresh=5000, type="input" ] {
        Thing data apparent_power_L1 [ readStart="19028", readValueType="float32" ]
        Thing data apparent_power_L2 [ readStart="19030", readValueType="float32" ]
        Thing data apparent_power_L3 [ readStart="19032", readValueType="float32" ]
        Thing data sum_apparent_power [ readStart="19034", readValueType="float32" ]
    }
    // Poller für Blindleistung (Reactive Power)
    Bridge poller reactive_power [ start=19036, length=8, refresh=5000, type="input" ] {
        Thing data reactive_power_L1 [ readStart="19036", readValueType="float32" ]
        Thing data reactive_power_L2 [ readStart="19038", readValueType="float32" ]
        Thing data reactive_power_L3 [ readStart="19040", readValueType="float32" ]
        Thing data sum_reactive_power [ readStart="19042", readValueType="float32" ]
    }
    // Poller für Power Factor und Frequenz
    Bridge poller power_factor [ start=19044, length=10, refresh=5000, type="input" ] {
        Thing data power_factor_L1 [ readStart="19044", readValueType="float32" ]
        Thing data power_factor_L2 [ readStart="19046", readValueType="float32" ]
        Thing data power_factor_L3 [ readStart="19048", readValueType="float32" ]
        Thing data measured_frequency [ readStart="19050", readValueType="float32" ]
        Thing data rotation_field [ readStart="19052", readValueType="int16" ]
    }
    // Poller für Digitale Eingänge und Ausgänge
    Bridge poller digital_io [ start=30400, length=12, refresh=2000, type="holding" ] {
        Thing data digital_input_1 [ readStart="30400", readValueType="uint16" ]
        Thing data digital_input_2 [ readStart="30401", readValueType="uint16" ]
        Thing data digital_input_3 [ readStart="30402", readValueType="uint16" ]
        Thing data digital_output_1 [ readStart="30406", readValueType="uint16" ]
        Thing data digital_output_2 [ readStart="30407", readValueType="uint16" ]
        Thing data digital_output_3 [ readStart="30408", readValueType="uint16" ]
        // Steuerbare digitale Ausgänge (Write-Funktionalität ergänzt)
        Thing data set_digital_output_1 [ readStart="30409", readValueType="uint16", writeStart="30409", writeValueType="uint16", writeType="holding" ]
        Thing data set_digital_output_2 [ readStart="30410", readValueType="uint16", writeStart="30410", writeValueType="uint16", writeType="holding" ]
        Thing data set_digital_output_3 [ readStart="30411", readValueType="uint16", writeStart="30411", writeValueType="uint16", writeType="holding" ]
    }
    // Poller für Externe Ereignisse
    Bridge poller external_events [ start=30046, length=4, refresh=5000, type="holding" ] {
        Thing data event_digital_input_1 [ readStart="30046", readValueType="uint16" ]
        Thing data event_digital_input_2 [ readStart="30047", readValueType="uint16" ]
        Thing data event_digital_input_3 [ readStart="30048", readValueType="uint16" ]
    }
    // Poller für Systeminformationen
    Bridge poller system_info [ start=100, length=12, refresh=10000, type="holding" ] {
        Thing data timestamp_utc [ readStart="100", readValueType="uint32" ]
        Thing data serial_number [ readStart="911", readValueType="uint32" ]
        Thing data production_number [ readStart="20012", readValueType="uint32" ]
        Thing data article_number [ readStart="20016", readValueType="uint32" ]
        Thing data device_type_id [ readStart="20047", readValueType="uint16" ]
        Thing data firmware_version [ readStart="26160", readValueType="string", length=16 ]
        Thing data ext_temperature [ readStart="20061", readValueType="float32" ]
    }
    // Poller für Zeitsynchronisation
    Bridge poller time_sync [ start=31498, length=8, refresh=10000, type="holding" ] {
        Thing data clock_sync_interval [ readStart="31498", readValueType="uint16" ]
        Thing data validation_result [ readStart="31499", readValueType="uint16" ]
        Thing data en60870_millisecond [ readStart="31500", readValueType="uint16" ]
        Thing data en60870_min_hour [ readStart="31501", readValueType="uint16" ]
        Thing data en60870_day_month [ readStart="31502", readValueType="uint16" ]
        Thing data en60870_year [ readStart="31503", readValueType="uint16" ]
        Thing data averaging_interval [ readStart="31504", readValueType="uint16" ]
    }
    // Poller für Modbus Broadcast Einstellungen
    Bridge poller modbus_settings [ start=32604, length=1, refresh=10000, type="holding" ] {
        Thing data enable_modbus_broadcast [ readStart="32604", readValueType="uint16" ]
    }
}

Attempt 2 modbus.things

Bridge modbus:tcp:UMG96PA [ host="192.168.178.24", port=502, id=1, enableDiscovery=true ] {
    Thing device UMG96PA "UMG96PA Energy Meter" @ "Modbus" [ ] {
        Channels:
            Type number : voltage_L1_N [ readStart="19000", readValueType="float32" ]
            Type number : voltage_L2_N [ readStart="19002", readValueType="float32" ]
            Type number : voltage_L3_N [ readStart="19004", readValueType="float32" ]
            Type number : voltage_L1_L2 [ readStart="19006", readValueType="float32" ]
            Type number : voltage_L2_L3 [ readStart="19008", readValueType="float32" ]
            Type number : voltage_L3_L1 [ readStart="19010", readValueType="float32" ]
            Type number : current_L1 [ readStart="19012", readValueType="float32" ]
            Type number : current_L2 [ readStart="19014", readValueType="float32" ]
            Type number : current_L3 [ readStart="19016", readValueType="float32" ]
            Type number : vector_sum_current [ readStart="19018", readValueType="float32" ]
            Type number : real_power_L1 [ readStart="19020", readValueType="float32" ]
            Type number : real_power_L2 [ readStart="19022", readValueType="float32" ]
            Type number : real_power_L3 [ readStart="19024", readValueType="float32" ]
            Type number : sum_real_power [ readStart="19026", readValueType="float32" ]
            Type number : apparent_power_L1 [ readStart="19028", readValueType="float32" ]
            Type number : apparent_power_L2 [ readStart="19030", readValueType="float32" ]
            Type number : apparent_power_L3 [ readStart="19032", readValueType="float32" ]
            Type number : sum_apparent_power [ readStart="19034", readValueType="float32" ]
            Type number : reactive_power_L1 [ readStart="19036", readValueType="float32" ]
            Type number : reactive_power_L2 [ readStart="19038", readValueType="float32" ]
            Type number : reactive_power_L3 [ readStart="19040", readValueType="float32" ]
            Type number : sum_reactive_power [ readStart="19042", readValueType="float32" ]
            Type number : power_factor_L1 [ readStart="19044", readValueType="float32" ]
            Type number : power_factor_L2 [ readStart="19046", readValueType="float32" ]
            Type number : power_factor_L3 [ readStart="19048", readValueType="float32" ]
            Type number : measured_frequency [ readStart="19050", readValueType="float32" ]
            Type number : rotation_field [ readStart="19052", readValueType="int16" ]
            Type number : digital_input_1 [ readStart="30400", readValueType="uint16" ]
            Type number : digital_input_2 [ readStart="30401", readValueType="uint16" ]
            Type number : digital_input_3 [ readStart="30402", readValueType="uint16" ]
            Type number : digital_output_1 [ readStart="30406", readValueType="uint16" ]
            Type number : digital_output_2 [ readStart="30407", readValueType="uint16" ]
            Type number : digital_output_3 [ readStart="30408", readValueType="uint16" ]
            Type number : set_digital_output_1 [ readStart="30409", readValueType="uint16", writeStart="30409", writeValueType="uint16", writeType="holding" ]
            Type number : set_digital_output_2 [ readStart="30410", readValueType="uint16", writeStart="30410", writeValueType="uint16", writeType="holding" ]
            Type number : set_digital_output_3 [ readStart="30411", readValueType="uint16", writeStart="30411", writeValueType="uint16", writeType="holding" ]
            Type number : event_digital_input_1 [ readStart="30046", readValueType="uint16" ]
            Type number : event_digital_input_2 [ readStart="30047", readValueType="uint16" ]
            Type number : event_digital_input_3 [ readStart="30048", readValueType="uint16" ]
            Type number : timestamp_utc [ readStart="100", readValueType="uint32" ]
            Type number : serial_number [ readStart="911", readValueType="uint32" ]
            Type number : production_number [ readStart="20012", readValueType="uint32" ]
            Type number : article_number [ readStart="20016", readValueType="uint32" ]
            Type number : device_type_id [ readStart="20047", readValueType="uint16" ]
            Type string : firmware_version [ readStart="26160", readValueType="string", length=16 ]
            Type number : ext_temperature [ readStart="20061", readValueType="float32" ]
            Type number : clock_sync_interval [ readStart="31498", readValueType="uint16" ]
            Type number : validation_result [ readStart="31499", readValueType="uint16" ]
            Type number : en60870_millisecond [ readStart="31500", readValueType="uint16" ]
            Type number : en60870_min_hour [ readStart="31501", readValueType="uint16" ]
            Type number : en60870_day_month [ readStart="31502", readValueType="uint16" ]
            Type number : en60870_year [ readStart="31503", readValueType="uint16" ]
            Type number : averaging_interval [ readStart="31504", readValueType="uint16" ]
            Type number : enable_modbus_broadcast [ readStart="32604", readValueType="uint16" ]
    }
}

For all i use the same items

//
// Janiza UMG96PA
//
// Spannungen (Voltage)
Number Voltage_L1_N "Spannung L1-N [%.2f V]" { channel="modbus:data:UMG96PA:voltage:voltage_L1_N:number" }
Number Voltage_L2_N "Spannung L2-N [%.2f V]" { channel="modbus:data:UMG96PA:voltage:voltage_L2_N:number" }
Number Voltage_L3_N "Spannung L3-N [%.2f V]" { channel="modbus:data:UMG96PA:voltage:voltage_L3_N:number" }
Number Voltage_L1_L2 "Spannung L1-L2 [%.2f V]" { channel="modbus:data:UMG96PA:voltage:voltage_L1_L2:number" }
Number Voltage_L2_L3 "Spannung L2-L3 [%.2f V]" { channel="modbus:data:UMG96PA:voltage:voltage_L2_L3:number" }
Number Voltage_L3_L1 "Spannung L3-L1 [%.2f V]" { channel="modbus:data:UMG96PA:voltage:voltage_L3_L1:number" }
// Ströme (Current)
Number Current_L1 "Strom L1 [%.2f A]" { channel="modbus:data:UMG96PA:current:current_L1:number" }
Number Current_L2 "Strom L2 [%.2f A]" { channel="modbus:data:UMG96PA:current:current_L2:number" }
Number Current_L3 "Strom L3 [%.2f A]" { channel="modbus:data:UMG96PA:current:current_L3:number" }
Number Vector_Sum_Current "Vektorstromsumme [%.2f A]" { channel="modbus:data:UMG96PA:current:vector_sum_current:number" }
// Wirkleistung (Real Power)
Number Real_Power_L1 "Wirkleistung L1 [%.2f W]" { channel="modbus:data:UMG96PA:real_power:real_power_L1:number" }
Number Real_Power_L2 "Wirkleistung L2 [%.2f W]" { channel="modbus:data:UMG96PA:real_power:real_power_L2:number" }
Number Real_Power_L3 "Wirkleistung L3 [%.2f W]" { channel="modbus:data:UMG96PA:real_power:real_power_L3:number" }
Number Sum_Real_Power "Gesamtwirkleistung [%.2f W]" { channel="modbus:data:UMG96PA:real_power:sum_real_power:number" }
// Scheinleistung (Apparent Power)
Number Apparent_Power_L1 "Scheinleistung L1 [%.2f VA]" { channel="modbus:data:UMG96PA:apparent_power:apparent_power_L1:number" }
Number Apparent_Power_L2 "Scheinleistung L2 [%.2f VA]" { channel="modbus:data:UMG96PA:apparent_power:apparent_power_L2:number" }
Number Apparent_Power_L3 "Scheinleistung L3 [%.2f VA]" { channel="modbus:data:UMG96PA:apparent_power:apparent_power_L3:number" }
Number Sum_Apparent_Power "Gesamtscheinleistung [%.2f VA]" { channel="modbus:data:UMG96PA:apparent_power:sum_apparent_power:number" }
// Blindleistung (Reactive Power)
Number Reactive_Power_L1 "Blindleistung L1 [%.2f var]" { channel="modbus:data:UMG96PA:reactive_power:reactive_power_L1:number" }
Number Reactive_Power_L2 "Blindleistung L2 [%.2f var]" { channel="modbus:data:UMG96PA:reactive_power:reactive_power_L2:number" }
Number Reactive_Power_L3 "Blindleistung L3 [%.2f var]" { channel="modbus:data:UMG96PA:reactive_power:reactive_power_L3:number" }
Number Sum_Reactive_Power "Gesamtblindleistung [%.2f var]" { channel="modbus:data:UMG96PA:reactive_power:sum_reactive_power:number" }
// Power Factor und Frequenz
Number Power_Factor_L1 "Leistungsfaktor L1 [%.2f]" { channel="modbus:data:UMG96PA:power_factor:power_factor_L1:number" }
Number Power_Factor_L2 "Leistungsfaktor L2 [%.2f]" { channel="modbus:data:UMG96PA:power_factor:power_factor_L2:number" }
Number Power_Factor_L3 "Leistungsfaktor L3 [%.2f]" { channel="modbus:data:UMG96PA:power_factor:power_factor_L3:number" }
Number Measured_Frequency "Netzfrequenz [%.2f Hz]" { channel="modbus:data:UMG96PA:power_factor:measured_frequency:number" }
Number Rotation_Field "Drehfeldrichtung [%d]" { channel="modbus:data:UMG96PA:power_factor:rotation_field:number" }
// Digitale Eingänge & Ausgänge
Switch Digital_Input_1 "Digitaler Eingang 1" { channel="modbus:data:UMG96PA:digital_io:digital_input_1:number" }
Switch Digital_Input_2 "Digitaler Eingang 2" { channel="modbus:data:UMG96PA:digital_io:digital_input_2:number" }
Switch Digital_Input_3 "Digitaler Eingang 3" { channel="modbus:data:UMG96PA:digital_io:digital_input_3:number" }
Switch Digital_Output_1 "Digitaler Ausgang 1" { channel="modbus:data:UMG96PA:digital_io:digital_output_1:number" }
Switch Digital_Output_2 "Digitaler Ausgang 2" { channel="modbus:data:UMG96PA:digital_io:digital_output_2:number" }
Switch Digital_Output_3 "Digitaler Ausgang 3" { channel="modbus:data:UMG96PA:digital_io:digital_output_3:number" }
// Steuerbare Digitale Ausgänge
Switch Set_Digital_Output_1 "Digital Ausgang 1 (Steuerung)" { channel="modbus:data:UMG96PA:digital_io:set_digital_output_1:switch" }
Switch Set_Digital_Output_2 "Digital Ausgang 2 (Steuerung)" { channel="modbus:data:UMG96PA:digital_io:set_digital_output_2:switch" }
Switch Set_Digital_Output_3 "Digital Ausgang 3 (Steuerung)" { channel="modbus:data:UMG96PA:digital_io:set_digital_output_3:switch" }
// Externe Ereignisse
Number Event_Digital_Input_1 "Externer Ereignisstatus DI1 [%d]" { channel="modbus:data:UMG96PA:external_events:event_digital_input_1:number" }
Number Event_Digital_Input_2 "Externer Ereignisstatus DI2 [%d]" { channel="modbus:data:UMG96PA:external_events:event_digital_input_2:number" }
Number Event_Digital_Input_3 "Externer Ereignisstatus DI3 [%d]" { channel="modbus:data:UMG96PA:external_events:event_digital_input_3:number" }
// Systeminformationen
Number Timestamp_UTC "UTC-Zeitstempel [%d]" { channel="modbus:data:UMG96PA:system_info:timestamp_utc:number" }
Number Serial_Number "Seriennummer [%d]" { channel="modbus:data:UMG96PA:system_info:serial_number:number" }
Number Production_Number "Produktionsnummer [%d]" { channel="modbus:data:UMG96PA:system_info:production_number:number" }
Number Article_Number "Artikelnummer [%d]" { channel="modbus:data:UMG96PA:system_info:article_number:number" }
Number Device_Type_ID "Gerätetyp-ID [%d]" { channel="modbus:data:UMG96PA:system_info:device_type_id:number" }
String Firmware_Version "Firmware-Version [%s]" { channel="modbus:data:UMG96PA:system_info:firmware_version:string" }
Number Ext_Temperature "Externe Temperatur [%.1f °C]" { channel="modbus:data:UMG96PA:system_info:ext_temperature:number" }
// Modbus Broadcast Einstellungen
Switch Enable_Modbus_Broadcast "Modbus Broadcast [%d]" { channel="modbus:data:UMG96PA:modbus_settings:enable_modbus_broadcast:number" }

Method 1 is correct. method 2 will not work.

If you want to use the items in a model, create a group and put all items in that group. Then you can put the group in the right location of your model. You can do that in your items file.

As far as i remember (I’m in no means an “expert” for ModBus, so I may be wrong) the readStart of a Thing is the offset to the poller readStart, so it should be 0 for the first thing, 2 for the second thing and so on.

Hi i try to use groups but i don’t now what i do wrong.

I use this modbus.things

// Janiza UMG96PA
Bridge modbus:tcp:UMG96PA [ host="192.168.178.24", port=502, id=1, enableDiscovery=true ] {
    // Poller für Spannungen (Voltage)
    Bridge poller voltage [ start=19000, length=12, refresh=5000, type="input" ] {
        Thing data voltage_L1_N [ readStart="19000", readValueType="float32" ]
        Thing data voltage_L2_N [ readStart="19002", readValueType="float32" ]
        Thing data voltage_L3_N [ readStart="19004", readValueType="float32" ]
        Thing data voltage_L1_L2 [ readStart="19006", readValueType="float32" ]
        Thing data voltage_L2_L3 [ readStart="19008", readValueType="float32" ]
        Thing data voltage_L3_L1 [ readStart="19010", readValueType="float32" ]
    }
    // Poller für Ströme (Current)
    Bridge poller current [ start=19012, length=8, refresh=5000, type="input" ] {
        Thing data current_L1 [ readStart="19012", readValueType="float32" ]
        Thing data current_L2 [ readStart="19014", readValueType="float32" ]
        Thing data current_L3 [ readStart="19016", readValueType="float32" ]
        Thing data vector_sum_current [ readStart="19018", readValueType="float32" ]
    }
    // Poller für Wirkleistung (Real Power)
    Bridge poller real_power [ start=19020, length=8, refresh=5000, type="input" ] {
        Thing data real_power_L1 [ readStart="19020", readValueType="float32" ]
        Thing data real_power_L2 [ readStart="19022", readValueType="float32" ]
        Thing data real_power_L3 [ readStart="19024", readValueType="float32" ]
        Thing data sum_real_power [ readStart="19026", readValueType="float32" ]
    }
    // Poller für Scheinleistung (Apparent Power)
    Bridge poller apparent_power [ start=19028, length=8, refresh=5000, type="input" ] {
        Thing data apparent_power_L1 [ readStart="19028", readValueType="float32" ]
        Thing data apparent_power_L2 [ readStart="19030", readValueType="float32" ]
        Thing data apparent_power_L3 [ readStart="19032", readValueType="float32" ]
        Thing data sum_apparent_power [ readStart="19034", readValueType="float32" ]
    }
    // Poller für Blindleistung (Reactive Power)
    Bridge poller reactive_power [ start=19036, length=8, refresh=5000, type="input" ] {
        Thing data reactive_power_L1 [ readStart="19036", readValueType="float32" ]
        Thing data reactive_power_L2 [ readStart="19038", readValueType="float32" ]
        Thing data reactive_power_L3 [ readStart="19040", readValueType="float32" ]
        Thing data sum_reactive_power [ readStart="19042", readValueType="float32" ]
    }
    // Poller für Power Factor und Frequenz
    Bridge poller power_factor [ start=19044, length=10, refresh=5000, type="input" ] {
        Thing data power_factor_L1 [ readStart="19044", readValueType="float32" ]
        Thing data power_factor_L2 [ readStart="19046", readValueType="float32" ]
        Thing data power_factor_L3 [ readStart="19048", readValueType="float32" ]
        Thing data measured_frequency [ readStart="19050", readValueType="float32" ]
        Thing data rotation_field [ readStart="19052", readValueType="int16" ]
    }
    // Poller für Digitale Eingänge und Ausgänge
    Bridge poller digital_io [ start=30400, length=12, refresh=2000, type="holding" ] {
        Thing data digital_input_1 [ readStart="30400", readValueType="uint16" ]
        Thing data digital_input_2 [ readStart="30401", readValueType="uint16" ]
        Thing data digital_input_3 [ readStart="30402", readValueType="uint16" ]
        Thing data digital_output_1 [ readStart="30406", readValueType="uint16" ]
        Thing data digital_output_2 [ readStart="30407", readValueType="uint16" ]
        Thing data digital_output_3 [ readStart="30408", readValueType="uint16" ]
        // Steuerbare digitale Ausgänge (Write-Funktionalität ergänzt)
        Thing data set_digital_output_1 [ readStart="30409", readValueType="uint16", writeStart="30409", writeValueType="uint16", writeType="holding" ]
        Thing data set_digital_output_2 [ readStart="30410", readValueType="uint16", writeStart="30410", writeValueType="uint16", writeType="holding" ]
        Thing data set_digital_output_3 [ readStart="30411", readValueType="uint16", writeStart="30411", writeValueType="uint16", writeType="holding" ]
    }
    // Poller für Externe Ereignisse
    Bridge poller external_events [ start=30046, length=4, refresh=5000, type="holding" ] {
        Thing data event_digital_input_1 [ readStart="30046", readValueType="uint16" ]
        Thing data event_digital_input_2 [ readStart="30047", readValueType="uint16" ]
        Thing data event_digital_input_3 [ readStart="30048", readValueType="uint16" ]
    }
    // Poller für Systeminformationen
    Bridge poller system_info [ start=100, length=12, refresh=10000, type="holding" ] {
        Thing data timestamp_utc [ readStart="100", readValueType="uint32" ]
        Thing data serial_number [ readStart="911", readValueType="uint32" ]
        Thing data production_number [ readStart="20012", readValueType="uint32" ]
        Thing data article_number [ readStart="20016", readValueType="uint32" ]
        Thing data device_type_id [ readStart="20047", readValueType="uint16" ]
        Thing data firmware_version [ readStart="26160", readValueType="string", length=16 ]
        Thing data ext_temperature [ readStart="20061", readValueType="float32" ]
    }
    // Poller für Zeitsynchronisation
    Bridge poller time_sync [ start=31498, length=8, refresh=10000, type="holding" ] {
        Thing data clock_sync_interval [ readStart="31498", readValueType="uint16" ]
        Thing data validation_result [ readStart="31499", readValueType="uint16" ]
        Thing data en60870_millisecond [ readStart="31500", readValueType="uint16" ]
        Thing data en60870_min_hour [ readStart="31501", readValueType="uint16" ]
        Thing data en60870_day_month [ readStart="31502", readValueType="uint16" ]
        Thing data en60870_year [ readStart="31503", readValueType="uint16" ]
        Thing data averaging_interval [ readStart="31504", readValueType="uint16" ]
    }
    // Poller für Modbus Broadcast Einstellungen
    Bridge poller modbus_settings [ start=32604, length=1, refresh=10000, type="holding" ] {
        Thing data enable_modbus_broadcast [ readStart="32604", readValueType="uint16" ]
    }
}

and this modbus.items:

//
// Janiza UMG96PA
//
Group gUMG96PA
// Spannungen (Voltage)
Number Voltage_L1_N "Spannung L1-N [%.2f V]" (gUMG96PA) { channel="modbus:data:UMG96PA:voltage:voltage_L1_N:number" }
Number Voltage_L2_N "Spannung L2-N [%.2f V]" (gUMG96PA) { channel="modbus:data:UMG96PA:voltage:voltage_L2_N:number" }
Number Voltage_L3_N "Spannung L3-N [%.2f V]" (gUMG96PA) { channel="modbus:data:UMG96PA:voltage:voltage_L3_N:number" }
Number Voltage_L1_L2 "Spannung L1-L2 [%.2f V]" (gUMG96PA) { channel="modbus:data:UMG96PA:voltage:voltage_L1_L2:number" }
Number Voltage_L2_L3 "Spannung L2-L3 [%.2f V]" (gUMG96PA) { channel="modbus:data:UMG96PA:voltage:voltage_L2_L3:number" }
Number Voltage_L3_L1 "Spannung L3-L1 [%.2f V]" (gUMG96PA) { channel="modbus:data:UMG96PA:voltage:voltage_L3_L1:number" }
// Ströme (Current)
Number Current_L1 "Strom L1 [%.2f A]" (gUMG96PA) { channel="modbus:data:UMG96PA:current:current_L1:number" }
Number Current_L2 "Strom L2 [%.2f A]" (gUMG96PA) { channel="modbus:data:UMG96PA:current:current_L2:number" }
Number Current_L3 "Strom L3 [%.2f A]" (gUMG96PA) { channel="modbus:data:UMG96PA:current:current_L3:number" }
Number Vector_Sum_Current "Vektorstromsumme [%.2f A]" (gUMG96PA) { channel="modbus:data:UMG96PA:current:vector_sum_current:number" }
// Wirkleistung (Real Power)
Number Real_Power_L1 "Wirkleistung L1 [%.2f W]" (gUMG96PA) { channel="modbus:data:UMG96PA:real_power:real_power_L1:number" }
Number Real_Power_L2 "Wirkleistung L2 [%.2f W]" (gUMG96PA) { channel="modbus:data:UMG96PA:real_power:real_power_L2:number" }
Number Real_Power_L3 "Wirkleistung L3 [%.2f W]" (gUMG96PA) { channel="modbus:data:UMG96PA:real_power:real_power_L3:number" }
Number Sum_Real_Power "Gesamtwirkleistung [%.2f W]" (gUMG96PA) { channel="modbus:data:UMG96PA:real_power:sum_real_power:number" }
// Scheinleistung (Apparent Power)
Number Apparent_Power_L1 "Scheinleistung L1 [%.2f VA]" (gUMG96PA) { channel="modbus:data:UMG96PA:apparent_power:apparent_power_L1:number" }
Number Apparent_Power_L2 "Scheinleistung L2 [%.2f VA]" (gUMG96PA) { channel="modbus:data:UMG96PA:apparent_power:apparent_power_L2:number" }
Number Apparent_Power_L3 "Scheinleistung L3 [%.2f VA]" (gUMG96PA) { channel="modbus:data:UMG96PA:apparent_power:apparent_power_L3:number" }
Number Sum_Apparent_Power "Gesamtscheinleistung [%.2f VA]" (gUMG96PA) { channel="modbus:data:UMG96PA:apparent_power:sum_apparent_power:number" }
// Blindleistung (Reactive Power)
Number Reactive_Power_L1 "Blindleistung L1 [%.2f var]" (gUMG96PA) { channel="modbus:data:UMG96PA:reactive_power:reactive_power_L1:number" }
Number Reactive_Power_L2 "Blindleistung L2 [%.2f var]" (gUMG96PA) { channel="modbus:data:UMG96PA:reactive_power:reactive_power_L2:number" }
Number Reactive_Power_L3 "Blindleistung L3 [%.2f var]" (gUMG96PA) { channel="modbus:data:UMG96PA:reactive_power:reactive_power_L3:number" }
Number Sum_Reactive_Power "Gesamtblindleistung [%.2f var]" (gUMG96PA) { channel="modbus:data:UMG96PA:reactive_power:sum_reactive_power:number" }
// Power Factor und Frequenz
Number Power_Factor_L1 "Leistungsfaktor L1 [%.2f]" (gUMG96PA) { channel="modbus:data:UMG96PA:power_factor:power_factor_L1:number" }
Number Power_Factor_L2 "Leistungsfaktor L2 [%.2f]" (gUMG96PA) { channel="modbus:data:UMG96PA:power_factor:power_factor_L2:number" }
Number Power_Factor_L3 "Leistungsfaktor L3 [%.2f]" (gUMG96PA) { channel="modbus:data:UMG96PA:power_factor:power_factor_L3:number" }
Number Measured_Frequency "Netzfrequenz [%.2f Hz]" (gUMG96PA) { channel="modbus:data:UMG96PA:power_factor:measured_frequency:number" }
Number Rotation_Field "Drehfeldrichtung [%d]" (gUMG96PA) { channel="modbus:data:UMG96PA:power_factor:rotation_field:number" }
// Digitale Eingänge & Ausgänge
Switch Digital_Input_1 "Digitaler Eingang 1" (gUMG96PA) { channel="modbus:data:UMG96PA:digital_io:digital_input_1:number" }
Switch Digital_Input_2 "Digitaler Eingang 2" (gUMG96PA) { channel="modbus:data:UMG96PA:digital_io:digital_input_2:number" }
Switch Digital_Input_3 "Digitaler Eingang 3" (gUMG96PA) { channel="modbus:data:UMG96PA:digital_io:digital_input_3:number" }
Switch Digital_Output_1 "Digitaler Ausgang 1" (gUMG96PA) { channel="modbus:data:UMG96PA:digital_io:digital_output_1:number" }
Switch Digital_Output_2 "Digitaler Ausgang 2" (gUMG96PA) { channel="modbus:data:UMG96PA:digital_io:digital_output_2:number" }
Switch Digital_Output_3 "Digitaler Ausgang 3" (gUMG96PA) { channel="modbus:data:UMG96PA:digital_io:digital_output_3:number" }
// Steuerbare Digitale Ausgänge
Switch Set_Digital_Output_1 "Digital Ausgang 1 (Steuerung)" (gUMG96PA) { channel="modbus:data:UMG96PA:digital_io:set_digital_output_1:switch" }
Switch Set_Digital_Output_2 "Digital Ausgang 2 (Steuerung)" (gUMG96PA) { channel="modbus:data:UMG96PA:digital_io:set_digital_output_2:switch" }
Switch Set_Digital_Output_3 "Digital Ausgang 3 (Steuerung)" (gUMG96PA) { channel="modbus:data:UMG96PA:digital_io:set_digital_output_3:switch" }
// Externe Ereignisse
Number Event_Digital_Input_1 "Externer Ereignisstatus DI1 [%d]" (gUMG96PA) { channel="modbus:data:UMG96PA:external_events:event_digital_input_1:number" }
Number Event_Digital_Input_2 "Externer Ereignisstatus DI2 [%d]" (gUMG96PA) { channel="modbus:data:UMG96PA:external_events:event_digital_input_2:number" }
Number Event_Digital_Input_3 "Externer Ereignisstatus DI3 [%d]" (gUMG96PA) { channel="modbus:data:UMG96PA:external_events:event_digital_input_3:number" }
// Systeminformationen
Number Timestamp_UTC "UTC-Zeitstempel [%d]" (gUMG96PA) { channel="modbus:data:UMG96PA:system_info:timestamp_utc:number" }
Number Serial_Number "Seriennummer [%d]" (gUMG96PA) { channel="modbus:data:UMG96PA:system_info:serial_number:number" }
Number Production_Number "Produktionsnummer [%d]" (gUMG96PA) { channel="modbus:data:UMG96PA:system_info:production_number:number" }
Number Article_Number "Artikelnummer [%d]" (gUMG96PA) { channel="modbus:data:UMG96PA:system_info:article_number:number" }
Number Device_Type_ID "Gerätetyp-ID [%d]" (gUMG96PA) { channel="modbus:data:UMG96PA:system_info:device_type_id:number" }
String Firmware_Version "Firmware-Version [%s]" (gUMG96PA) { channel="modbus:data:UMG96PA:system_info:firmware_version:string" }
Number Ext_Temperature "Externe Temperatur [%.1f °C]" (gUMG96PA) { channel="modbus:data:UMG96PA:system_info:ext_temperature:number" }
// Modbus Broadcast Einstellungen
Switch Enable_Modbus_Broadcast "Modbus Broadcast [%d]" (gUMG96PA) { channel="modbus:data:UMG96PA:modbus_settings:enable_modbus_broadcast:number" }

If i try “create equipment from thing”

If i try to “create point from thing”

I both i can’t finde my groupe?

In the end i want my channels lik thia


I have no idea what i do wrong

And now i found no enterien for the log for more than the first poll?

i will be thankfull for all idears.
Heiko

I will post you examples of my text config tomorrow. But I dont use the user interface, all my config is in text files so I cant help with that.
I have a group that is called home, then the home has few member groups (example inside group and outside group ). Then for example the inside group has rooms groups and the equipment group (i.e. your device) is located in a room.

For example my pool controller, see screenshot below

Your group is actually your power meter SE-10K.

I am not sure what you want to achieve. I thought you wanted a simple way to group your items

Hi DarkoG,
The representation of the SE-10K should serve as an example of how I would like to represent the UMG96PA. I would also like to define the model via the text interface, if that is possible. Especially since I have a few other devices that I want to integrate via modbus, if I have to take over each value individually I’ll go crazy. I prefer using the keyboard rather than the mouse. :slight_smile:

(Unfortunately, I can hardly find any tutorials that deal in depth with text-based configuration.)

Heiko

I advice you to check this tutorial:

and this

See example for below Modbus thing(pool pump frequency drive)

    Bridge modbus:tcp:Modbus_VFD_Filter_Pump [ host="192.168.4.238", port=9000, id=2 ] {
    Bridge poller  Modbus_VFD_Filter_Pump_Measure [ start=1, length=22, refresh=5000, type="holding" ] {    
        Thing data  Modbus_VFD_Filter_Pump_Frequency                   "Modbus VFD Filter Pump Frequency"                       [ readStart="1", readValueType="int16" ]
        Thing data  Modbus_VFD_Filter_CMD_Frequency                     "Modbus VFD Filter CMD Frequency"                       [ readStart="2", readValueType="int16" ]
        Thing data  Modbus_VFD_Filter_Output_Current                    "Modbus VFD Filter Output Current"                      [ readStart="3", readValueType="int16" ]
        Thing data  Modbus_VFD_Filter_Output_Voltage                    "Modbus VFD Filter Output Voltage"                      [ readStart="4", readValueType="int16" ]
        //Thing data  Modbus_VFD_Filter_Drive_Status                      "Modbus VFD Filter Drive Status"                        [ readStart="6", readValueType="int16" ]
        Thing data  Modbus_VFD_Filter_Fault_Code                        "Modbus VFD Filter Fault Code"                          [ readStart="7", readValueType="int16" ]
        Thing data  Modbus_VFD_Filter_Run_Time                          "Modbus VFD Filter Elapsed Run Time "                   [ readStart="18", readValueType="int16" ]
        Thing data  Modbus_VFD_Temperature                              "Modbus VFD Filter Temperature"                         [ readStart="22", readValueType="int16" ]
    }
    
    Bridge poller  Modbus_VFD_Filter_Status     [ start=8448, length=1, refresh=5000, type="holding" ] {
        Thing data  Modbus_VFD_Filter_Ready                   "Modbus VFD Filter Pump Ready"            [ readStart="8448.0", readValueType="bit" ]
        Thing data  Modbus_VFD_Filter_Running                 "Modbus VFD Filter Pump Running"          [ readStart="8448.1", readValueType="bit" ]
        Thing data  Modbus_VFD_Filter_Alarm                   "Modbus VFD Filter Pump Alarm"            [ readStart="8448.6", readValueType="bit" ]
        Thing data  Modbus_VFD_Filter_Fault                   "Modbus VFD Filter Pump Fault"            [ readStart="8448.7", readValueType="bit" ]
        Thing data  Modbus_VFD_Filter_At_Reference            "Modbus VFD Filter Pump At reference"     [ readStart="8448.8", readValueType="bit" ]
    }    
    }

items file (note that all items are in grpPool)


//VFD Filter Pump
    Number      Modbus_VFD_Filter_Frequency_Out                    "Modbus VFD Filter Frequency Out"                (grpPool)        ["Measurement"]                  { channel="modbus:data:Modbus_VFD_Filter_Pump:Modbus_VFD_Filter_Pump_Measure:Modbus_VFD_Filter_Pump_Frequency:number"}  
    Number      Modbus_VFD_Filter_Frequency_CMD                    "Modbus VFD Filter Frequency CMD"                (grpPool)        ["Measurement"]                  { channel="modbus:data:Modbus_VFD_Filter_Pump:Modbus_VFD_Filter_Pump_Measure:Modbus_VFD_Filter_CMD_Frequency:number"}  
    Number      Modbus_VFD_Filter_Output_Current                   "Modbus VFD Output Current"                      (grpPool)        ["Measurement"]                  { channel="modbus:data:Modbus_VFD_Filter_Pump:Modbus_VFD_Filter_Pump_Measure:Modbus_VFD_Filter_Output_Current:number"}  
    Number      Modbus_VFD_Filter_Output_Voltage                   "Modbus VFD Output Voltage"                      (grpPool)        ["Measurement"]                  { channel="modbus:data:Modbus_VFD_Filter_Pump:Modbus_VFD_Filter_Pump_Measure:Modbus_VFD_Filter_Output_Voltage:number"}  
    //Number      Modbus_VFD_Filter_Drive_Status                     "Modbus VFD Drive Status"                        (grpPool)        ["Measurement"]                  { channel="modbus:data:Modbus_VFD_Filter_Pump:Modbus_VFD_Filter_Pump_Measure:Modbus_VFD_Filter_Drive_Status:number"}  
    
    Number      Modbus_VFD_Filter_Fault_Code                       "Modbus VFD Filter Fault Code [MAP(vfd_error_codes.map):%s]"    (grpPool)        ["Measurement"]   { channel="modbus:data:Modbus_VFD_Filter_Pump:Modbus_VFD_Filter_Pump_Measure:Modbus_VFD_Filter_Fault_Code:number"}  
    
    Number      Modbus_VFD_Filter_Run_Time                         "Modbus VFD Run Time"                            (grpPool)        ["Measurement"]                  { channel="modbus:data:Modbus_VFD_Filter_Pump:Modbus_VFD_Filter_Pump_Measure:Modbus_VFD_Filter_Run_Time:number"}  
    Number      Modbus_VFD_Temperature                             "Modbus VFD Temperature [%d °C]"                         (grpPool)        ["Measurement"]                  { channel="modbus:data:Modbus_VFD_Filter_Pump:Modbus_VFD_Filter_Pump_Measure:Modbus_VFD_Temperature:number"}  

    Switch      Modbus_VFD_Filter_Ready                            "Modbus VFD Filter Ready"                        (grpPool)        ["Measurement"]                  { channel="modbus:data:Modbus_VFD_Filter_Pump:Modbus_VFD_Filter_Status:Modbus_VFD_Filter_Ready:switch"}         
    Switch      Modbus_VFD_Filter_Running                          "Modbus VFD Filter Running"                      (grpPool)        ["Measurement"]                  { channel="modbus:data:Modbus_VFD_Filter_Pump:Modbus_VFD_Filter_Status:Modbus_VFD_Filter_Running:switch"}         
    Switch      Modbus_VFD_Filter_Alarm                            "Modbus VFD Filter Alarm"                        (grpPool)        ["Measurement"]                  { channel="modbus:data:Modbus_VFD_Filter_Pump:Modbus_VFD_Filter_Status:Modbus_VFD_Filter_Alarm:switch"}         
    Switch      Modbus_VFD_Filter_Fault                            "Modbus VFD Filter Fault"                        (grpPool)        ["Measurement"]                  { channel="modbus:data:Modbus_VFD_Filter_Pump:Modbus_VFD_Filter_Status:Modbus_VFD_Filter_Fault:switch"}         
    Switch      Modbus_VFD_Filter_At_Reference                     "Modbus VFD Filter At Reference"                 (grpPool)        ["Measurement"]                  { channel="modbus:data:Modbus_VFD_Filter_Pump:Modbus_VFD_Filter_Status:Modbus_VFD_Filter_Ready:switch"}         
         

extract of my groups definition (you can do this in .items file)

Group           grpHome                   "Home"              <house>                                                       ["Building"]

Group           grpOutside                "Outside"           <garden>           (grpHome)                                  ["Outdoor"]
Group           grpInside                 "Inside"            <house>            (grpHome)                                  ["Indoor"]
Group           grpGroundFloor            "Ground Floor"      <groundfloor>      (grpInside)                                ["GroundFloor"]
Group           grpFirstFloor             "First Floor"       <firstfloor>       (grpInside)                                ["FirstFloor"]

Group           grpBackyard               "Backyard"          <lawnmower>        (grpOutside)                               ["Garden"]

Group           grpPool                    "Pool"                 <water>         (grpBackyard)                           ["Terrace"]                                                               

Hello Udo, thank you for your support, it seems that in the background it is recognized whether it is an offset or the address directly, at least I have come across both in examples. I myself use the direct address, which works very well with several devices.

I am currently wondering whether you can also use HEX values ​​in the form 0x5B00 or whether only decimal is allowed, because I have an ABB meter here where no plausible data is returned. But I cannot rule out the possibility that the used meter is defective.

1 Like

Hi DarkoG,
Thank you very much, your examples helped me a lot.

Do you also define your pages directly as code? Can you give me a few tips here.

@all
Does anyone know if it is possible to control the sampling rate of a Modbus poll using a script? I would like to change the sampling rate for a short time for testing purposes

no, I use the web interface.

I can’t help with your other question. Maybe you can change the polling rate of your thing duringyour test.