DOIF Reading mit dynamischen Namen auslesen

Begonnen von iamandy, 16 Februar 2022, 13:48:02

Vorheriges Thema - Nächstes Thema

iamandy

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?

Damian

Indirekte Ereignistrigger kann DOIF nicht.

Wie viele verschiedene Filamente hast du denn?
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

iamandy

#2
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.

Damian

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.

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

iamandy