Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

removed data::dumper::maxdepth setting #863

Merged
merged 5 commits into from
Mar 27, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 14 additions & 4 deletions lib/mqtt.pm
Original file line number Diff line number Diff line change
Expand Up @@ -209,8 +209,15 @@ sub log {

$prefix = $prefix || 'MQTT: ';
while( length( $str ) > $maxlength ) {
&main::print_log( $prefix . substr($str,0,$maxlength) );
$str = substr( $str, $maxlength );
my $l = 0;
my $i;
for( $i=0; $i<length($str) && $l<$maxlength; ++$i,++$l ) {
if( substr( $str, $i, 1 ) eq "\n" ) {
$l = 0;
}
}
&main::print_log( $prefix . substr($str,0,$i) );
$str = substr( $str, $i );
$prefix = '.... ';
}
&main::print_log( $prefix . $str );
Expand All @@ -226,7 +233,7 @@ sub debug {

sub error {
my ($self, $str, $level ) = @_;
&main::print_log( "MQTT ERROR: $str" );
&mqtt::log( $self, $str, "MQTT ERROR: " );
}

# ------------------------------------------------------------------------------
Expand Down Expand Up @@ -634,6 +641,9 @@ sub send_mqtt_msg {

# print( "writing to mqtt socket '$msg'\n" );
# syswrite ?
if( !defined $$self{socket} ) {
return;
}
syswrite $$self{socket}, $msg, length $msg;

# Reset the next_ping timer (we sent something so we don't need another ping
Expand Down Expand Up @@ -1010,7 +1020,7 @@ sub cleanup_retained_topics {
my $ignore_count;

if( scalar(@topic_pattern_list) == 0 ) {
mqtt::error( "cleanup_retained_topics -- must specify pattern" );
&mqtt::error( undef, "cleanup_retained_topics -- must specify pattern" );
return;
}
$self->debug( 2, "cleanup topic pattern list: @topic_pattern_list" );
Expand Down
7 changes: 4 additions & 3 deletions lib/mqtt_discovery.pm
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ sub new { #### mqtt_DiscoveredItem
} elsif( $disc_type eq 'binary_sensor' ) {
} elsif( $disc_type eq 'sensor' ) {
} elsif( $disc_type eq 'switch' ) {
} elsif( $disc_type eq 'multi_switch' ) {
} elsif( $disc_type eq 'select' ) {
} else {
$disc_obj->log( "UNRECOGNIZED DISCOVERY TYPE: $disc_type" );
return;
Expand Down Expand Up @@ -182,8 +182,9 @@ sub new { #### mqtt_DiscoveredItem
$obj_name = $disc_obj->get_object_name;
$self->debug( 1, "New mqtt_DiscoveredItem( $obj_name, '$name', '$disc_topic', '$disc_msg' )" );

$Data::Dumper::Maxdepth = 3;
$self->debug( 3, "DiscoveryItem created: \n" . Dumper( $self ) );
my $d = Data::Dumper->new( [$self] );
$d->Maxdepth( 3 );
$self->debug( 3, "DiscoveryItem created: \n" . $d->Dump );

# We may need flags to deal with XML, JSON or Text
return $self;
Expand Down
62 changes: 45 additions & 17 deletions lib/mqtt_items.pm
Original file line number Diff line number Diff line change
Expand Up @@ -313,10 +313,10 @@ sub new { ### mqtt_BaseItem
$self->{topic} = $listentopics;
$self->{disc_type} = $type;

if( !grep( /^$type$/, ('light', 'switch', 'binary_sensor', 'sensor', 'scene', 'multi_switch') ) ) {
$self->error( "UNKNOWN DEVICE TYPE: '$self->{mqtt_name}':$self->{mqtt_type}" );
return;
}
# if( !grep( /^$type$/, ('light', 'switch', 'binary_sensor', 'sensor', 'scene', 'select') ) ) {
# $self->error( "UNKNOWN DEVICE TYPE: '$self->{mqtt_name}':$self->{mqtt_type}" );
# return;
# }

if( $self->{mqtt_type} eq 'scene' ) {
$self->{disc_type} = 'switch';
Expand All @@ -335,21 +335,27 @@ sub new { ### mqtt_BaseItem

sub log {
my( $self, $str ) = @_;
&main::print_log( 'MQTT: '. $str );
$self->{interface}->log( $str );
}

sub error {
my( $self, $str ) = @_;
&main::print_log( "MQTT ERROR: $str" );
$self->{interface}->error( $str );
}

sub debug {
my( $self, $level, $str ) = @_;
if( $self->debuglevel( $level, 'mqtt' ) ) {
&main::print_log( "MQTT D$level: $str" );
$self->{interface}->log( $str, "MQTT D$level: " );
}
}

=item C<set_object_debug( level )>

Turns on debugging for the object, sets debug level.

=cut

sub set_object_debug {
my( $self, $level ) = @_;
my $objname = lc $self->get_object_name();
Expand Down Expand Up @@ -432,6 +438,7 @@ sub process_template {
my( $self, $template, $value_json, $value ) = @_;

if( $template ) {
$template =~ s/ //g;
$template =~ s/^\{\{value_json\.([a-zA-Z\-_]*)\}\}/\$value_json->\{\1\}/;
$template =~ s/^\{\{value_json\[\\?\'?([a-zA-Z\-_]*)\\?\'?\]\}\}/\$value_json->\{\1\}/;
if( $template !~ /^\$/ ) {
Expand All @@ -450,13 +457,14 @@ sub process_template {
sub decode_mqtt_payload {
my( $self, $topic, $payload, $retained ) = @_;
my $msg;
my $unset_value = 'unset_value_987654123';
my $value_json;
my $value;
my $brightness;
my $value_on;
my $value_off;

$msg = undef;
$msg = $unset_value;
if( $topic eq $self->{disc_info}->{state_topic} ) {
$value_on = $self->{disc_info}->{state_on};
$value_off = $self->{disc_info}->{state_off};
Expand Down Expand Up @@ -544,14 +552,16 @@ sub decode_mqtt_payload {
}
} elsif( $$self{mqtt_type} eq 'sensor' ) {
$msg = $value;
} elsif( $$self{mqtt_type} eq 'multi_switch' ) {
} elsif( $$self{mqtt_type} eq 'select' ) {
$msg = $value;
} else {
$self->error( "Unknown object type '$$self{mqtt_type}' on object '$$self{topic}'" );
$self->debug( 2, "Unknown object type '$$self{mqtt_type}' on object '$$self{topic}'" );
$msg = $value_json;
}
if( !$msg ) {
$self->error( "Unable to decode mqtt message '$payload'" );
if( $msg eq $unset_value ) {
$self->error( "Unable to decode mqtt message for $$self{mqtt_name} type:$$self{mqtt_type} message:'$payload'" );
# $self->error( Dumper( $self ) );
$msg = undef;
}
return $msg;
}
Expand Down Expand Up @@ -581,7 +591,7 @@ sub encode_mqtt_payload {
($level) = $setval =~ /^([1]?[0-9]?[0-9])%?$/;
}
if( $self->{mqtt_type} eq 'sensor'
|| $self->{mqtt_type} eq 'multi_switch'
|| $self->{mqtt_type} eq 'select'
) {
$payload = $setval;
return $payload;
Expand Down Expand Up @@ -885,7 +895,7 @@ sub new { ### mqtt_LocalItem

my ($base_type, $device_class) = $type =~ m/^([^:]*):?(.*)$/;

if( !grep( /^$base_type$/, ('light','switch','binary_sensor', 'sensor', 'scene', 'multi_switch' ) ) ) {
if( !grep( /^$base_type$/, ('light','switch','binary_sensor', 'sensor', 'scene', 'select' ) ) ) {
$interface->error( "Invalid mqtt type '$type'" );
return;
}
Expand Down Expand Up @@ -947,8 +957,12 @@ sub new { ### mqtt_LocalItem
if( $device_class eq 'temperature' ) {
$self->{disc_info}->{unit_of_measurement} = 'C';
}
} elsif( $base_type eq 'multi_switch' ) {
} elsif( $base_type eq 'select' ) {
$self->{disc_info}->{command_topic} = "$topic_prefix/set";
if( $local_object ) {
my @state_list = $local_object->get_states();
$self->{disc_info}->{options} = \@state_list;
}
}

$self->{is_local} = 1;
Expand All @@ -972,7 +986,11 @@ sub new { ### mqtt_LocalItem

$self->create_discovery_message();

$self->debug( 3, "locale item created: \n" . Dumper( $self ) );

# my $d = Data::Dumper->new( [$self] );
# $d->Maxdepth( 3 );
# $self->debug( 3, "locale item created: \n" . $d->Dump );


# We may need flags to deal with XML, JSON or Text
return $self;
Expand Down Expand Up @@ -1206,6 +1224,10 @@ sub receive_mqtt_message {
$p_setby = 'mqtt';
}
$setval = $self->decode_mqtt_payload( $topic, $message, $retained );
if( ref $setval ) {
$self->{state_obj} = $setval;
$setval = undef;
}
if( $setval ) {
$self->debug( 1, "remote item MQTT to MH $$self{mqtt_name} set($setval, '$p_setby')" );
$self->level( $setval ) if $self->can( 'level' );
Expand All @@ -1215,13 +1237,18 @@ sub receive_mqtt_message {
return;
}
if( $topic eq $self->{disc_info}->{availability_topic} ) {
if( $retained ) {
$p_setby = 'mqtt [retained]';
} else {
$p_setby = 'mqtt';
}
if( $message eq $self->{disc_info}->{payload_available} ) {
if( !$retained ) {
$self->log( "$self->{object_name} now available" );
}
} elsif( $message eq $self->{disc_info}->{payload_not_available} ) {
$self->log( "$self->{mqtt_name} is not available" );
$self->SUPER::set( $message, "mqtt" );
$self->SUPER::set( $message, $p_setby );
} else {
$self->error( "$self->{object_name} received unrecognized availability message: $message" );
}
Expand Down Expand Up @@ -1536,6 +1563,7 @@ sub new { ### mqtt_InstMqttItem

$self->create_discovery_message();


# $self->debug( 1, "InstMqttItem created: \n" . Dumper( $self ) );

# We may need flags to deal with XML, JSON or Text
Expand Down
Loading