FHEM Forum

FHEM => Frontends => TabletUI => Thema gestartet von: Burt_Gummer am 23 November 2023, 02:14:27

Titel: Füllstandsanzeige für Pellettank mit data-substitution, bekomme es nicht hin
Beitrag von: Burt_Gummer am 23 November 2023, 02:14:27
Moin!
Ich habe einen Ultraschallsensor in meinen Pelletofen gebaut. Dieser misst den Stand der Pellets in cm. Funktioniert soweit ganz gut.

Nun würde ich anstelle des Farbwechsels bei bestimmten Werten gern anstatt der cm Angabe die Wörter "voll, halbvoll, nachfüllen" bei bestimmten Bereichen in der FTUI angeben.

Das war bisher mein Code:
        <td><div data-type="label" data-device="Pelletmenge" data-get="SR04_Distance" data-pre-text="Pelletmenge (" data-post-text=" cm)" class="tall inline left"></div></td><td><div data-type="label" data-device="Pelletmenge" data-get="SR04_Distance" data-fix="1" data-limits='[20,21,75]' data-colors='["green","yellow","#FF0000"]'class="tall right"></div></td>
Funktioniert soweit einwandfrei.

Nun hätte ich wie gesagt ganz gern:

0-20cm das Wort "voll" in grün
21-75cm das Wort "halbvoll" in gelb
ab 75cm das Wort "nachfüllen" in rot

So, bisher bin ich so weit gekommen:

    <td><div data-type="label" data-device="Pelletmenge" data-get="SR04_Distance" data-pre-text="Pelletmenge (" data-post-text=" cm)" class="tall inline left"></div></td><td><div data-type="label" data-device="Pelletmenge" data-get="Pellethoehe" data-substitution='["^([0-19]*[\\.,][\\d]*)$","voll","^([22-50]*[\\.,]?[\\d]*$)","halbvoll","^([51-99]*[\\.,]?[\\d]*$)","leer"]' data-limits-part="(\d*).*" data-limits='[0,5]' data-colors='["green","yellow","#FF0000"]'class="tall right"></div></td>
Problem:
Es wir so immer nur "halbvoll" angezeigt, unabhängig vom Reading.

Das Reading ist immer eine ganze Zahl von 1 - 99

Wo ist mein Denkfehler?
Titel: Aw: Füllstandsanzeige für Pellettank mit data-substitution, bekomme es nicht hin
Beitrag von: yersinia am 23 November 2023, 08:17:02
Hast du die RegEx mal getestet (https://regex101.com/)?
data-substitution='["^([0-19]*[\\.,][\\d]*)$","voll","^([22-50]*[\\.,]?[\\d]*$)","halbvoll","^([51-99]*[\\.,]?[\\d]*$)","leer"]'
Zitat von: Burt_Gummer am 23 November 2023, 02:14:27Nun hätte ich wie gesagt ganz gern:

0-20cm das Wort "voll" in grün
21-75cm das Wort "halbvoll" in gelb
ab 75cm das Wort "nachfüllen" in rot

Das Reading ist immer eine ganze Zahl von 1 - 99
Versuch mal, evtl klappt dies besser (ungetestet):
data-substitution='["^([0-9]|[1][0-9]|20)$","voll","^([2][1-9]|[3-6][0-9]|[7][0-4])$","halbvoll","^([7][5-9]|[8-9][0-9])$","nachfüllen"]'
Titel: Aw: Füllstandsanzeige für Pellettank mit data-substitution, bekomme es nicht hin
Beitrag von: Burt_Gummer am 23 November 2023, 19:28:43
Zitat von: yersinia am 23 November 2023, 08:17:02Hast du die RegEx mal getestet (https://regex101.com/)?
data-substitution='["^([0-19]*[\\.,][\\d]*)$","voll","^([22-50]*[\\.,]?[\\d]*$)","halbvoll","^([51-99]*[\\.,]?[\\d]*$)","leer"]'
Zitat von: Burt_Gummer am 23 November 2023, 02:14:27Nun hätte ich wie gesagt ganz gern:

0-20cm das Wort "voll" in grün
21-75cm das Wort "halbvoll" in gelb
ab 75cm das Wort "nachfüllen" in rot

Das Reading ist immer eine ganze Zahl von 1 - 99
Versuch mal, evtl klappt dies besser (ungetestet):
data-substitution='["^([0-9]|[1][0-9]|20)$","voll","^([2][1-9]|[3-6][0-9]|[7][0-4])$","halbvoll","^([7][5-9]|[8-9][0-9])$","nachfüllen"]'

Das scheint zu funktionieren, würde gern aber noch die Grenzwerte anpassen.

Kannst du mir das Zahlengebrösel evtl. mal erklären?
Wie ergibt sich daraus das?
0-20cm
21-75cm
ab 75cm

Will ich jetzt zum Beispiel die Werte folgendermaßen ändern:

0-30cm
31-60cm
ab 61cm

Das Zahlenwirrwarr in den Klammern ergibt für mich 0 Sinn, sorry.
Die erste 20 ja und dann?
Möchte das gern auch verstehen und nicht nur abkopieren

Farbwechsel von Grün auf Gelb auf Rot wäre dann noch ein Träumchen :)

EDIT:

Glaube ich bin da halbwegs durchgestiegen?

([0-9]|[1][0-9]|[2][1-9]|30)        0-30
([3][1-9]|[4][0-4])                21-44
([4][5-9]|[5-9][0-9])              45-99

Nun noch der Farbwechsel

Titel: Aw: Füllstandsanzeige für Pellettank mit data-substitution, bekomme es nicht hin
Beitrag von: Burt_Gummer am 23 November 2023, 21:29:35
So, habs selber hinbekommen.

Hier der Code, falls es denn jemanden interessieren sollte:

    <td><div data-type="label" data-device="Pelletmenge" data-get="SR04_Distance" data-fix=0 data-pre-text="Pelletmenge (" data-post-text=" cm)" class="tall inline left"></div></td><td><div data-type="label" data-device="Pelletmenge" data-get="Pellethoehe" data-substitution='["^([0-9]|[1][0-9]|[2][0-9]|30)$","voll","^([3][1-9]|[4][0-7])$","halbvoll","^([4][8-9]|[5-9][0-9])$","nachf&uuml;llen"]' data-limits='[1,31,48]' data-colors='["green","yellow","#FF0000"]' class="tall right"></div></td>

Spannend wäre nun noch, die Zentimeter vom data-get Device in % umzurechnen.
Dazu bräuchte ich allerdings auch einen Anschubser

Der Sensor geht erst ab 25cm (10cm sind eh Luft vom Sensor bis zu den Pellets), ergo wären 0-25cm 100%
50cm wäre dann kurz vor leer, würde sagen 5%.



Titel: Aw: Füllstandsanzeige für Pellettank mit data-substitution, bekomme es nicht hin
Beitrag von: yersinia am 24 November 2023, 08:06:43
Zitat von: Burt_Gummer am 23 November 2023, 19:28:43Das Zahlenwirrwarr in den Klammern ergibt für mich 0 Sinn, sorry.
Die erste 20 ja und dann?
Möchte das gern auch verstehen und nicht nur abkopieren
=> http://www.regex101.com (http://www.regex101.com/)

Zitat von: Burt_Gummer am 23 November 2023, 21:29:35Spannend wäre nun noch, die Zentimeter vom data-get Device in % umzurechnen.
Dazu bräuchte ich allerdings auch einen Anschubser

Der Sensor geht erst ab 25cm (10cm sind eh Luft vom Sensor bis zu den Pellets), ergo wären 0-25cm 100%
50cm wäre dann kurz vor leer, würde sagen 5%.
Das würde ich eher in einem FHEM userReading (https://wiki.fhem.de/wiki/UserReadings) im Device selbst definieren bzw berechnen und dann in FTUI nur noch anzeigen.
Titel: Aw: Füllstandsanzeige für Pellettank mit data-substitution, bekomme es nicht hin
Beitrag von: Burt_Gummer am 24 November 2023, 13:22:15
Zitat von: yersinia am 24 November 2023, 08:06:43Das würde ich eher in einem FHEM userReading (https://wiki.fhem.de/wiki/UserReadings) im Device selbst definieren bzw berechnen und dann in FTUI nur noch anzeigen.

Die Idee mit dem Userreading hatte ich auch schon, nur hakt es bei mir mit der Berechnung aus. Keine Idee wie ich das machen kann.
Titel: Aw: Füllstandsanzeige für Pellettank mit data-substitution, bekomme es nicht hin
Beitrag von: yersinia am 24 November 2023, 13:59:27
Anbei ein Denkanstoß (ungetestet):
fuellstandRel:SR04_Distance.* {
    my $min = 25;
    my $max = 50;
    my $v = 0;
    if(ReadingsNum($name,"SR04_Distance",0) < $min) {
        $v = 100;
    } elsif (ReadingsNum($name,"SR04_Distance",0) > $max) {
        $v = 0;
    } else {
        $v = (1 - (ReadingsNum($name,"SR04_Distance",0) / $max)) * 100;
    }
    return sprintf("%.1f", $v);
},
Titel: Aw: Füllstandsanzeige für Pellettank mit data-substitution, bekomme es nicht hin
Beitrag von: Burt_Gummer am 24 November 2023, 23:15:17
Zitat von: yersinia am 24 November 2023, 13:59:27Anbei ein Denkanstoß (ungetestet):
fuellstandRel:SR04_Distance.* {
    my $min = 25;
    my $max = 50;
    my $v = 0;
    if(ReadingsNum($name,"SR04_Distance",0) < $min) {
        $v = 100;
    } elsif (ReadingsNum($name,"SR04_Distance",0) > $max) {
        $v = 0;
    } else {
        $v = (1 - (ReadingsNum($name,"SR04_Distance",0) / $max)) * 100;
    }
    return sprintf("%.1f", $v);
},


Da scheint aber noch was in der Berechnung falsch zu sein?

setstate Pelletmenge 2023-11-24 23:09:30 Pelletprozent 42.8
setstate Pelletmenge 2023-11-24 23:12:30 SR04_Distance 28.6


Pellets sind eigentlich noch voll mit 28.6cm.
Das können ja keine 42,8% sein

Das soll ja quasi rückwärts anzeigen.

25cm = 100%
50cm = 5% (0% würden auch gehen)




Titel: Aw: Füllstandsanzeige für Pellettank mit data-substitution, bekomme es nicht hin
Beitrag von: Burt_Gummer am 25 November 2023, 14:08:44
...niemand mit Mathe Studium hier?

Mit meinen begrenzten 3 Satz Kenntnissen komme ich leider nicht weiter.

Titel: Aw: Füllstandsanzeige für Pellettank mit data-substitution, bekomme es nicht hin
Beitrag von: Burt_Gummer am 26 November 2023, 17:00:14
Nur für die Atomphysiker hier:
Habs selbst rausgefunden.
Echt enttäuschend, wenn ich mir überlege, wie oft ich hier schon angegangen wurde, wegen meiner "dummen" Fragen.

Pelletprozent:SR04_Distance.* {my $min = 25;my $max = 50; my $v = 0; if(ReadingsNum($name,"SR04_Distance",0) < $min) {$v = 100;} elsif (ReadingsNum($name,"SR04_Distance",0) > $max) {$v = 0;} else {$v = (100- (1- (1 - ((ReadingsNum($name,"SR04_Distance",0) - $min ) / ($max - $min)))) * 100) } return sprintf("%.1f", $v);}
Titel: Aw: Füllstandsanzeige für Pellettank mit data-substitution, bekomme es nicht hin
Beitrag von: yersinia am 26 November 2023, 20:35:34
Zitat von: Burt_Gummer am 25 November 2023, 14:08:44...niemand mit Mathe Studium hier?

Mit meinen begrenzten 3 Satz Kenntnissen komme ich leider nicht weiter.
Zitat von: Burt_Gummer am 26 November 2023, 17:00:14Nur für die Atomphysiker hier:
Habs selbst rausgefunden.
Echt enttäuschend, wenn ich mir überlege, wie oft ich hier schon angegangen wurde, wegen meiner "dummen" Fragen.
Interessante Wortwahl und Tonlage für Jemanden, welcher unentgeltlich Hilfe für nicht-kommerzielle Software von nicht-kommerziellen Nutzern in deren Privatzeit erbittet und sich scheinbar nicht im Stande sieht, intellektuelle Eigenleistung aufzubringen.

Allerdings ist es schön, dass du einen individuellen Lösungsansatz gefunden hast und diesen mit anderen Nutzern teilst.