Hallo zusammen
Ich suche einen Weg ein Reading auszulesen dessen Name Dynamisch ist
Was ich gerne hätte
1. Schaue welches Filament aktuell eingelegt ist (steht in Readiing [ender_filament2_dummy:test2])
2. Schaue wie viel Filament beim aktuellen Druck verbraucht wurde (steht in [Ender.Status.DOIF:filament_mm])
3. Schaue wie viel Filament insgesamt, von dem aktuell eingelegten, verbraucht wurde (steht im wert von [ender_filament2_dummy:%[ender_filament2_dummy:test2]%) Hier müsste ich also irgendwie eine Variable übergeben...
4. Rechne Filament (3) und (2) zusammen und schiebe den Wert in (1)
DOIF...
[auslößer...]
(setreading ender_filament2_dummy [ender_filament2_dummy:test2] {([ender_filament2_dummy:(ReadingsVal("ender_filament2_dummy","test2","17")):d] + [Ender.Status.DOIF:filament_mm:d])} )
Readings Wert
PLA-Bronzegold 105
PLA-Silber 505
PETG-Rot 165
PETG-Blau 335
...
test2 PLA-Bronzegold
filament_mm 321
Der Anfang Funktioniert:
setreading ender_filament2_dummy [ender_filament2_dummy:test2]
Was nicht funktioniert ist der 2. Teil der Zeile:
{([ender_filament2_dummy:[ender_filament2_dummy:test2]:d] + [Ender.Status.DOIF:filament_mm:d])}
oder
{([ender_filament2_dummy:(ReadingsVal("ender_filament2_dummy","test2","17")):d] + [Ender.Status.DOIF:filament_mm:d])}
Habt ihr eine Idee wie ich den dynamischen Namen, der in [ender_filament2_dummy:test2] steht, übergeben und dann damit rechnen kann?
Indirekte Ereignistrigger kann DOIF nicht.
Wie viele verschiedene Filamente hast du denn?
Zitat von: Damian am 16 Februar 2022, 16:56:15
Indirekte Ereignistrigger kann DOIF nicht.
Wie viele verschiedene Filamente hast du denn?
Aktuell sind es 19, aber Tendenz steigend (auch wenn mich das selbst stark verwundert).
Ist das denn überhaupt ein Ereignistrigger? Ich will ja nicht getrigert werden, sondern während eine setreading soll was dynamisch passieren.. :-[
Ich habe mal probiert ein zusätzliches Notify zu bauen. ender_filament2_dummy:Akt_Filament:.* { my $Akt_Filament= ReadingsVal("ender_filament2_dummy","Akt_Filament",0) ;;;; my $mm= ReadingsVal("ender_filament2_dummy","$Akt_Filament",0) ;;;; fhem("setreading ender_filament2_dummy test9 $EVENT") ;;;; fhem("setreading ender_filament2_dummy temp-mm $mm") ;;;; }
So scheint es zu gehen. Wenn man ich es nicht ins DOIF einbauen kann, dann würde ich das Notify nebenher laufen lassen. Übersichtlicher wäre es allerdings im DOIF, weil da auch alles andere passiert...
Was meinst du, soll ich das Notify so lassen?
Ich würde dann im DOIF immer nur ender_filament2_dummy:temp-mm zugreifen, da das ja immer dem aktuellen entspricht.
Du kannst ja mit ReadingsVal von ReadingsVal rechnen:
(setreading ender_filament2_dummy [ender_filament2_dummy:test2] {(ReadingsVal("ender_filament2_dummy",(ReadingsVal("ender_filament2_dummy","test2","17"))) + [Ender.Status.DOIF:filament_mm:d])} )
Runden kannst du mit sprintf.
Passt schon, danke.