use strict; use utf8; use warnings; use Mojo::JSON qw|from_json|; use bytes; use MBclient; sub new { ... .; } sub _device_read { # $d as data # $mbc as ModBusControl # $r as response my ( $d, $mbc, $r ) = ( shift, MBclient->new(), undef ); # parse device config $d->{regs} = from_json( $d->{regs} ); # setup device attributes $mbc->host( $d->{ip} ); $mbc->port( $d->{port} ); $mbc->unit_id(0); # by default. # for all specified registers foreach my $reg ( keys %{ $d->{regs}->{r} } ) { $r->{$reg} = _prettify_byte( # read data from device registers $mbc->read_input_registers( # converting text register address to hex hex($reg), # specify number of registers to read $d->{regs}->{r}->{$reg} ) ); } return ($r); } # converts from hex data to deximal # recieve output from modbus sensors sub _prettify_byte { # okay state of deal return ( sprintf( '%.2f', unpack( 'f', pack( 's2', @{ $_[0] }[ 1, 0 ] ) ) ) ) if ( $_[0] ); #return error message return ( $c{_err_} ); }