Ich weiss nicht so recht, wo ich das Thema unterbringen soll...
Ich arbeite gerade an einem neuen Perl-Modul für FHEM. Als Basis bzw. zu Orientierung habe ich 00_cul.pm auserkoren. Zu CUL_Read($) habe ich ein Verständnisproblem:
762 sub
763 CUL_Read($)
764 {
765 my ($hash) = @_;
766
767 my $buf = DevIo_SimpleRead($hash);
768 return "" if(!defined($buf));
769 my $name = $hash->{NAME};
770
771 my $culdata = $hash->{PARTIAL};
772 Log3 $name, 5, "CUL/RAW: $culdata/$buf";
773 $culdata .= $buf;
774
775 while($culdata =~ m/\n/) {
776 my $rmsg;
777 ($rmsg,$culdata) = split("\n", $culdata, 2);
778 $rmsg =~ s/\r//;
779 CUL_Parse($hash, $hash, $name, $rmsg) if($rmsg);
780 }
781 $hash->{PARTIAL} = $culdata;
782 }
Das Log3 (Zeile 772) produziert im original CUL-Modul nur einzeilige Log-Einträge. In meiner Ableitung habe ich aber i.d.R. noch eine Leerzeile dahinter. Da am Ende ja $buf, mit ungefiltertem Ergebnis von DevIo_SimpleRead, ausgegeben wird, müsste das doch eigentlich bei CUL auch so sein? Die Abarbeitung (ab Zeile 775) erfolgt ja offenbar auch erst, sobald ein Zeilenumbruch gefunden wird...
Ok, ist der gleiche Käse beim CUL wie bei mir (HChh):
2014.10.23 17:40:20 5: CUL/RAW: /T4D0600B60016
2014.10.23 17:40:20 4: CUL_Parse: MyCUL T4D0600B60016 -63
2014.10.23 17:40:20 5: MyCUL dispatch 810c04xx0909a0014d060000b600
2014.10.23 17:40:20 4: FHT FHT_Wohnzimmer actuator: 0%
2014.10.23 17:40:20 5: Triggering FHT_Wohnzimmer (1 changes)
2014.10.23 17:40:20 5: Notify loop for FHT_Wohnzimmer actuator: 0%
2014.10.23 17:40:25 5: CUL/RAW: /T2B1A00B60011
2014.10.23 17:40:25 4: CUL_Parse: MyCUL T2B1A00B60011 -65.5
2014.10.23 17:40:25 5: MyCUL dispatch 810c04xx0909a0012b1a0000b600
2014.10.23 17:40:25 4: FHT FHT_xxx actuator: 0%
2014.10.23 17:40:25 5: Triggering FHT_xxx (1 changes)
2014.10.23 17:40:25 5: Notify loop for FHT_Astrid actuator: 0%
2014.10.23 17:40:28 3: HChh/RAW: /DS28244E9430034=20.94;
2014.10.23 17:40:28 3: HChh received: DS28244E9430034=20.94;
Ist das echt sinnvoll, die Zeilenumbrüche mit ins Log zu schreiben? Sollten die nicht gefiltert werden?