Doif wenn userreading einen bestimmten wert hat (Klipper 3D Drucker)

Begonnen von erotikbaer, 11 Februar 2022, 23:47:42

Vorheriges Thema - Nächstes Thema

erotikbaer

Zitat von: Otto123 am 12 Februar 2022, 22:10:03
ich will nochmal auf meine bisher ignorierte Formel hinweisen.
Die wäre für das userReadings und Joachims Idee genau das richtige: Modulo Division
in der Art, die 4 ist anzupassen
message {ReadingsNum($name,'Druckfortschritt',0) % 25 < 4}
eocr muss gesetzt werden
dann einfach auf das Reading message:.1 triggern

aber die damit müssten die sprünge doch gleichmäßig sein bzw würde er dann doch mehrfach die pushnachricht senden wenn z.b. einmal 26 und einmal 28 als wert kommt, oder?

MadMax-FHEM

#16
In etwa so (wie ich oben ja geschrieben hatte ;)  ), wenn ich mich nicht vertan habe:


Druckfortschritt {my $progress=0; my $value=ReadingsNum($name,"status_virtual_sdcard_progress",0); if($value > 90){$progress=100}elsif($value>75){$progress=75}elsif($value>50){$progress=50}elsif($value>25){$progress=25}elsif($value>10){$progress=10}; return $progress}

EDIT: korrigiert (so hoffe ich ;) )...

Ob du 100 bei größer 90 auf 100 setzt oder tatsächlich bei 100 auf 100 oder ganz andere Stufen nimmst: up to you...
EDIT: oder auch statt > ein >= wählst...

So müsste dann dein DOIF ja tun.
Wie geschrieben eocr noch setzen, sonst bekommst du auch "innerhalb" der Stufen mehrfach Meldungen...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

erotikbaer

Vielen dank, Joachim.
Ich probiere es mal aus.

Wünsche noch einen schönen Abend und ein schönes Wochenende.

MadMax-FHEM

Falsche Reihenfolge ;)

Also zuerst mit den großen Werten anfangen, sorry.

Weil so kommt immer 0 oder 10 zurück... 8)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Otto123

Zitat von: erotikbaer am 12 Februar 2022, 22:11:42
aber die damit müssten die sprünge doch gleichmäßig sein bzw würde er dann doch mehrfach die pushnachricht senden wenn z.b. einmal 26 und einmal 28 als wert kommt, oder?
Nein, der Ausdruck liefert bei 28, 27, 26 jeweils eine 1 dann eine 0 wenn Du die gleichen Events mit eocr verhinderst bekommst Du je eine Nachricht.
Du kannst auch 5 oder 6 oder 7 nehmen, dann ist die Schwelle größer, Du hast nur gesagt es ist unterschiedlich. Musst Du also finden.

Ok die 10 musst Du noch extra machen - aber der Rest ist mit einem Ausdruck gemacht.
Aber vielleicht funktioniert es nicht  8)

define n_push notify MQTT_Klipper:message:.1 set Pushover msg [MQTT_Klipper:Druckfortschritt]
attr MQTT_Klipper userReadings Druckfortschritt {sprintf("%.0f",ReadingsNum($name,"status_virtual_sdcard_progress",0))}, Druckdauer_Bisher { strftime('%H:%M:%S', gmtime(ReadingsNum($NAME, "status_print_stats_total_duration", 0))), message:Druckfortschritt:.* {ReadingsNum($name,'Druckfortschritt',0) % 25 < 12}}
attr MQTT_Klipper event-on-change-reading .*

So ungefähr mit der 10 er Schwelle. Nicht getestet
{my $v= ReadingsNum($name,'Druckfortschritt',0);; $v % 25 < 12 or ($v < 24 and $v % 10 < 6)}
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

erotikbaer

ok, also mit dem code von joachim funktioniert es. ich musste nur 10 zu 0.10 und 25 zu 0.25 ändern, da die werte von klipper (nach einem update) augenscheinlich anders kommen... 1.00 ist nun 100 %

vielen dank euch beiden und ein schönes wochenende!

erotikbaer

#21
zu früh gefreut... der druckfortschritt wird zwar nun  korrekt gesetzt, aber ich  habe nur einmalig bei 10% eine benachrichtigung bekommen... der druckfortschritt wurde dann irgendwann korrekt auf 25 gesetzt, aber es gab keine benachrichtigung mehr.
das eocr habe ich beim mqtt_klipper und nicht beim doif gesetzt. ist das richtig?



OdfFhem

@erotikbaer

Du musst im DOIF das Attribut do auf always setzen ...

Otto123

deswegen ist bei solchen einfachen Aufgaben ein notify auch viel klarer und einfacher ...
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

erotikbaer

Zitat von: OdfFhem am 12 Februar 2022, 23:05:28
@erotikbaer

Du musst im DOIF das Attribut do auf always setzen ...

Danke dir, das scheint geholfen zu haben!

Otto123

Nochmal die Idee zu Ende gedacht: Fortschrittsanzeige für den Fall, dass ein userreading/Wert in einem Bereich liegt
Die Stufen $s sind flexibel und nicht auf 25% beschränkt. ;)
Als Demo für die FHEM Kommandozeile:
{my @a=(0..100);;my @arr;;
my $s=25;;
for (@a) {
    my $r = ( $_ > $s/4  and $_ % $s < $s/2 )?1:0;;
    push @arr, "$_ $r"
    }
  return join "\n", @arr
}
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz