Hallo zusammen,
ich komme gerade an einem Punkt mit meimem "unittest" Modul nicht weiter.
Ich schreibe den Satus meiner tests in ein Reading und lese es dann mit einem shell script aus.
Im Reading steht dann z.B. Folgendes nachdem ich ein ReadingUpdate ausgeführt habe:
'ok 1 - Dispatch was called
ok 2 - message is for module TCM97001
'
Im Browser wird das Reading auch genau so angezeigt, solange ich keinen Refresh des Fensters mache.
Mein Problem ist, dass der Zeilenumbruch irgendwie entfernt wird. Aktualisiere ich mein Browserfenster steht folgendes im Reading und beim Abruf via Telnet kommt es auch genau so heraus.
'ok 1 - Dispatch was called ok 2 - message is for module TCM97001'
Ich habe schon verschiedenes probiert, aber der Zeilenumbruch wird irgendwie entfernt. Ich habe bislang nur nicht gefunden wo / wie ich es umgehen könnte.
FHEMWEB konvertiert den Inhalt eines Readings vor der Anzeige nicht, und die Browser zeigen Newlines nicht an.
Okay, das Problem ist weitgehend verstanden.
Beim Zugriff via Telnet von einer Shell sorgt der IFS Parameter dafür, dass Zeilenumbrüche entfernt werden.
Das konnte ich leicht anpassen.
Dass der Browser es nicht darstellt verstehe ich.
Wie würde ich denn vorgehen, wenn ich Zeilenumbrüche durch <br> ersetzen wollte?
Gesendet von meinem XT1650 mit Tapatalk
RegEx, suchen und ersetzen \n durch <br> sollte gehen.
Zitat von: CoolTux am 24 September 2018, 15:50:37
RegEx, suchen und ersetzen \n durch <br> sollte gehen.
Danke für die Raketen schnelle Antwort.
Dass mit der Regel ist klar. Ich präzisieren meine Frage. :)
Wie konvertieren ich \n bei der Ausgabe via FhemWeb ersetzt aber nicht beim Zugriff via Telnet.
Das bekomme ich im Modul doch nicht mit wie ausgegeben wird, oder?
Grüße Sidey
Gesendet von meinem XT1650 mit Tapatalk
Bin mir gerade unsicher, aber
if( $hash->{cl} and $hash->{cl}->{TYPE} eq 'FHEMWEB' ) {
...
...
} elsif( $hash->{cl} and $hash->{cl}->{TYPE} eq 'telnet' ) {
...
...
}
Kann aber auch totaler Blödsinn sein. Kann es leider gerade nicht testen.
Grüße
Okay verstehe , aber FHEMweb greift doch direkt auf das Reading zu und ruft den Inhalt nicht durch eine von mir definierte Schnittstelle ab, oder?
Gesendet von meinem XT1650 mit Tapatalk
Stimmt hast Recht. Der Inhalt steht ja schon im Reading drin. Also Blödsinn. Ich würde behaupten wenn es drin steht kann dein Modul das ausliefern des Inhalts nicht ändern.
Ich habe FHEMWEB angepasst, damit Reading- und Internal Werte mit \n in einem <pre> Tag angezeigt werden.
Danke, das ist echt 8)
:) :) :) :) :)
Grüße Sidey
Moin,
ich muss das hier nochmal aufwärmen:
Browser: Firefox und Chromium, am PC und auf dem Handy.
Inhalt der Variablen in der myUtils:
my $debug = "Debugging\ ";
$debug .= "\n Winter";
$debug .= "\nSolarPower: $solarpower > eigenverbrauch $eigenverbrauch + 100";
$debug .= "\n_soc > 95 && soc < 99.7; modbus: $modbus = \n\tsolarpower $solarpower\n\t + wrinput $wrinput\n\t + addpower $addpower";
$data{debug} = $debug;
sub feedindebug{
return $data{debug};
}
Das Device:
attr <device> userreading debug {feedindebug();}
das Reading:
debug
Debugging Winter SolarPower: 8697 > eigenverbrauch 1850 + 100 _soc <= 95 && solarpower > 8000; modbus: -451.5 = total_power -800 + over 348.5
ein list:
Internals:
FUUID 5f061010-f33f-c595-f970-c82fbc33102ebff0
NAME Stromzaehler
NR 24
STATE Mbus: -346; EigenV: 1911 W; WRinput -2581 W; Pges: -670 W
TYPE dummy
READINGS:
2020-11-19 11:25:42 1_SolarPower 8648
2020-11-19 11:25:42 1_wrinput -2581
2020-11-19 11:25:42 2_soc 74.8
2020-11-19 11:25:42 3_eigenverbrauch 1911
2020-11-19 11:25:42 4_modbus -346
2020-11-19 11:25:42 6_Battpwr 7113
2020-11-19 11:25:42 debug Debugging
Winter
SolarPower: 8648 > eigenverbrauch 1911 + 100
_soc <= 95 && solarpower > 8000; modbus: -346 = total_power -670 + over 324
2020-11-19 11:25:42 total_power -670
2020-11-06 18:51:51 total_power_L1 -111.049573651576
2020-11-06 18:51:51 total_power_L2 63
2020-11-06 18:51:51 total_power_L3 -11
Attributes:
room Solar_PV
stateFormat {sprintf("Mbus: %d; EigenV: %d W; WRinput %d W; Pges: %d W",
ReadingsVal($name,"4_modbus",0),
ReadingsVal($name,"3_eigenverbrauch",0),
ReadingsVal($name,"1_wrinput",0),
ReadingsVal($name,"total_power",0))}
userReadings 4_modbus {feedInPower();},
2_soc {ReadingsNum("BMS","1_SOC_BMS_total",0);},
1_wrinput {ReadingsNum("fsp10k","AC_input_active_Power_total",0);},
1_SolarPower {ReadingsNum("fsp10k","Solar_input_power_1",0) + ReadingsNum("fsp10k","Solar_input_power_2",0);},
3_eigenverbrauch {(ReadingsNum($name,"1_wrinput",0)-ReadingsNum($name,"total_power",0))*-1;},
debug {feedindebug();},
6_Battpwr {ReadingsNum("BMS","1_Power_total",0);}
Der HTML-Quelltext:
<td><div class='dval' class='dval' informId='Stromzaehler-debug'><pre>Debugging
Winter
SolarPower: 8701 > eigenverbrauch 1445 + 100
_soc <= 95 && solarpower > 8000; modbus: 35.5 = total_power -315 + over 350.5</pre></div></td>
<td><div informId='Stromzaehler-debug-ts'>2020-11-19 11:24:28</div></td>
</tr>
Zeilenumbrüche werden dargestellt im Zeitraum von F5 drücken bis zur nächsten aktualisierung des Readings.
<br>, <br /> usw funktionieren wegen dem pre alle nicht mehr.
Wo liegt mein Denkfehler?
Ist das ein Browser-Problem?
Danke und Grüße,
Stephan