[gelöst] Perl-DOIFs können nicht mehr gespeichert werden

Begonnen von bstaeheli, 20 März 2025, 16:15:19

Vorheriges Thema - Nächstes Thema

bstaeheli

Hallo zusammen

Ich habe ein komisches Verhalten mit Perl-DOIFs. Da ist ein sehr umfangreiches DOIF mit Templates zur "Treppenhauslichtsteuerung". Als ich im Template eine Zeile hinzufügen wollte, konnte ich den Editor nicht speichern. Keine Fehlermeldung, nichts. Interessant ist, dass ich auch das bestehende produktive DOIF nicht mehr anpassen/Änderungen vornehmen kann in der Definition. Es lädt aber beim FHEM-Start sauber und funktioniert.

Unten ist ein Listing einer gekürzten Version mit demselben Verhalten, reproduziert bei mir. Dieses DOIF funktioniert noch. Sobald ich aber die Zeile:
push (@{$_bm},["GSegBMEckeNOGSegLMHaus",            "GS.eg.BM.EckeNO",        "state",        "motion",    "GS.eg.LM.Haus",                            120,    2,            "on"]);hinzufügen möchte kommt das beschriebeneVerhalten.

Kann das bitte mal jemand versuchen zu reproduzieren?

FHEM ist auf dem aktuellsten Stand.

Funktionierendes DOIF:
define NN.xx.XX.Test2.di DOIF subs {\
## Ein Szenario wird durch Hinzufügen einer Definitionszeile erstellt, ACHTUNG nur alphanumerische und übers ganze DOIF eindeutige Schlüssel verwenden\
## TPL_BM, (Bewegung, lokale Helligkeit), ansonsten wie TPL_BG\
## Schlafen:  0 = nein, 1 = nur beim Schlafen, >1 = immer\
##             Key                                    EventDev                Reading            Value        Schalt-Device                                Timer    Schlafen    SetOnCmd\
push (@{$_bm},["EGflBMEGflSWLicht",                    "EG.fl.BM",                "occupancy",    "true",     "EG.fl.SW.Licht",                            120,    0,            "on"]);;\
push (@{$_bm},["EGflBMGSegLMHaus",                    "EG.fl.BM",                "occupancy",    "true",     "GS.eg.LM.Haus",                            120,    1,            "on"]);;\
\
\
push (@{$_bm},["EGflTKHaustuerGSegLMHaus",            "EG.fl.TK.Haustuer",    "state",        "open",        "GS.eg.LM.Haus",                            120,    2,            "on"]);;\
push (@{$_bm},["EGflTKHaustuerEGflSWLicht",            "EG.fl.TK.Haustuer",    "state",        "open",        "EG.fl.SW.Licht",                            120,    0,            "on"]);;\
\
push (@{$_bm},["EGgaTKTorEGgaLMDecke",                "EG.ga.TK.Garagentor",    "state",        "open",     "EG.ga.LM.Decke",                            300,    2,            "on"]);;\
\
push (@{$_bm},["EGkuWSKochinselEGkuLM",               "EG.ku.WS.Kochinsel_Motion","state",    "motion",     "EG.ku.XX.Licht.di",                        120,    0,            "warm"]);;\
push (@{$_bm},["EGkuWSKochinselEGkuLMAsleep",        "EG.ku.WS.Kochinsel_Motion","state",    "motion",     "EG.ku.XX.Licht.di",                        120,    1,            "night"]);;\
\
push (@{$_bm},["GSefDIHoftorGSegLMDeckeNW",            "GS.ef.DI.Hoftor",        "state",        "uncertain","GS.eg.LM.DeckeNW",                            300,    2,            "warm"]);;\
push (@{$_bm},["GSefDIHoftorGSegLMHaus",            "GS.ef.DI.Hoftor",        "state",        "uncertain","GS.eg.LM.Haus",                            300,    2,            "on"]);;\
}
attr NN.xx.XX.Test2.di readingList test
attr NN.xx.XX.Test2.di room DEV
attr NN.xx.XX.Test2.di setList test:slider,0,100,9000
#   DEF        subs {
### Ein Szenario wird durch Hinzufügen einer Definitionszeile erstellt, ACHTUNG nur alphanumerische und übers ganze DOIF eindeutige Schlüssel verwenden
### TPL_BM, (Bewegung, lokale Helligkeit), ansonsten wie TPL_BG
### Schlafen:  0 = nein, 1 = nur beim Schlafen, >1 = immer
###             Key                                    EventDev                Reading            Value        Schalt-Device                                Timer    Schlafen    SetOnCmd
#push (@{$_bm},["EGflBMEGflSWLicht",                    "EG.fl.BM",                "occupancy",    "true",     "EG.fl.SW.Licht",                            120,    0,            "on"]);
#push (@{$_bm},["EGflBMGSegLMHaus",                    "EG.fl.BM",                "occupancy",    "true",     "GS.eg.LM.Haus",                            120,    1,            "on"]);
#
#
#push (@{$_bm},["EGflTKHaustuerGSegLMHaus",            "EG.fl.TK.Haustuer",    "state",        "open",        "GS.eg.LM.Haus",                            120,    2,            "on"]);
#push (@{$_bm},["EGflTKHaustuerEGflSWLicht",            "EG.fl.TK.Haustuer",    "state",        "open",        "EG.fl.SW.Licht",                            120,    0,            "on"]);
#
#push (@{$_bm},["EGgaTKTorEGgaLMDecke",                "EG.ga.TK.Garagentor",    "state",        "open",     "EG.ga.LM.Decke",                            300,    2,            "on"]);
#
#push (@{$_bm},["EGkuWSKochinselEGkuLM",               "EG.ku.WS.Kochinsel_Motion","state",    "motion",     "EG.ku.XX.Licht.di",                        120,    0,            "warm"]);
#push (@{$_bm},["EGkuWSKochinselEGkuLMAsleep",        "EG.ku.WS.Kochinsel_Motion","state",    "motion",     "EG.ku.XX.Licht.di",                        120,    1,            "night"]);
#
#push (@{$_bm},["GSefDIHoftorGSegLMDeckeNW",            "GS.ef.DI.Hoftor",        "state",        "uncertain","GS.eg.LM.DeckeNW",                            300,    2,            "warm"]);
#push (@{$_bm},["GSefDIHoftorGSegLMHaus",            "GS.ef.DI.Hoftor",        "state",        "uncertain","GS.eg.LM.Haus",                            300,    2,            "on"]);
#}
#   FUUID      637a6969-f33f-c28a-71de-141e277afeff8a8f
#   MODEL      Perl
#   NAME       NN.xx.XX.Test2.di
#   NOTIFYDEV  global
#   NR         573
#   NTFY_ORDER 50-NN.xx.XX.Test2.di
#   STATE      initialized
#   TYPE       DOIF
#   VERSION    29460 2024-12-29 20:25:48
#   eventCount 2
#   READINGS:
#     2025-03-20 16:05:42   mode            enabled
#     2025-03-20 16:05:42   state           initialized
#     2024-04-11 09:32:55   test            1200
#   Regex:
#     accu:
#     bar:
#     barAvg:
#     collect:
#   condition:
#   helper:
#     NOTIFYDEV  global
#     globalinit 1
#     last_timer 0
#     sleeptimer -1
#   perlblock:
#   uiState:
#   uiTable:
#   var:
#     bm:
#       ARRAY(0x55a2c9640cc0)
#       ARRAY(0x55a2d7aa03d8)
#       ARRAY(0x55a2d7a8bbf0)
#       ARRAY(0x55a2d8036800)
#       ARRAY(0x55a2dbadda68)
#       ARRAY(0x55a2d7aa06a8)
#       ARRAY(0x55a2cb461d48)
#       ARRAY(0x55a2c95d44f0)
#       ARRAY(0x55a2dbad0e00)
#
setstate NN.xx.XX.Test2.di initialized
setstate NN.xx.XX.Test2.di 2025-03-20 16:05:42 mode enabled
setstate NN.xx.XX.Test2.di 2025-03-20 16:05:42 state initialized
setstate NN.xx.XX.Test2.di 2024-04-11 09:32:55 test 1200



Damian

Ich kann bei mir in deiner Definition die eine push-Zeile hinzufügen und im Editor speichern. Ich benutze allerdings den codemirror.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

bstaeheli

Danke, Damian. Hast du mir die RAW Definition von deinem Device mit der zusätzlichen Zeile?

Bei mir funktioniert es weder in meinem Produktiven, noch Test-System.

Benutzt du auch ConfigDB?

Damian

defmod NN.xx.XX.Test2.di DOIF subs {\
## Ein Szenario wird durch Hinzufügen einer Definitionszeile erstellt, ACHTUNG nur alphanumerische und übers ganze DOIF eindeutige Schlüssel verwenden\
## TPL_BM, (Bewegung, lokale Helligkeit), ansonsten wie TPL_BG\
## Schlafen:  0 = nein, 1 = nur beim Schlafen, >1 = immer\
##             Key                                    EventDev                Reading            Value        Schalt-Device                                Timer    Schlafen    SetOnCmd\
push (@{$_bm},["EGflBMEGflSWLicht",                    "EG.fl.BM",                "occupancy",    "true",     "EG.fl.SW.Licht",                            120,    0,            "on"]);;\
push (@{$_bm},["EGflBMGSegLMHaus",                    "EG.fl.BM",                "occupancy",    "true",     "GS.eg.LM.Haus",                            120,    1,            "on"]);;\
\
\
push (@{$_bm},["EGflTKHaustuerGSegLMHaus",            "EG.fl.TK.Haustuer",    "state",        "open",        "GS.eg.LM.Haus",                            120,    2,            "on"]);;\
push (@{$_bm},["EGflTKHaustuerEGflSWLicht",            "EG.fl.TK.Haustuer",    "state",        "open",        "EG.fl.SW.Licht",                            120,    0,            "on"]);;\
\
push (@{$_bm},["EGgaTKTorEGgaLMDecke",                "EG.ga.TK.Garagentor",    "state",        "open",     "EG.ga.LM.Decke",                            300,    2,            "on"]);;\
\
push (@{$_bm},["EGkuWSKochinselEGkuLM",               "EG.ku.WS.Kochinsel_Motion","state",    "motion",     "EG.ku.XX.Licht.di",                        120,    0,            "warm"]);;\
push (@{$_bm},["EGkuWSKochinselEGkuLMAsleep",        "EG.ku.WS.Kochinsel_Motion","state",    "motion",     "EG.ku.XX.Licht.di",                        120,    1,            "night"]);;\
\
push (@{$_bm},["GSefDIHoftorGSegLMDeckeNW",            "GS.ef.DI.Hoftor",        "state",        "uncertain","GS.eg.LM.DeckeNW",                            300,    2,            "warm"]);;\
push (@{$_bm},["GSefDIHoftorGSegLMHaus",            "GS.ef.DI.Hoftor",        "state",        "uncertain","GS.eg.LM.Haus",                            300,    2,            "on"]);;\
push (@{$_bm},["GSegBMEckeNOGSegLMHaus",            "GS.eg.BM.EckeNO",        "state",        "motion",    "GS.eg.LM.Haus",                            120,    2,            "on"]);;\
}
attr NN.xx.XX.Test2.di readingList test
attr NN.xx.XX.Test2.di room DEV
attr NN.xx.XX.Test2.di setList test:slider,0,100,9000

setstate NN.xx.XX.Test2.di initialized
setstate NN.xx.XX.Test2.di 2025-03-20 17:39:08 mode enabled
setstate NN.xx.XX.Test2.di 2025-03-20 17:39:08 state initialized


Ich benutze nicht ConfigDB.

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

bstaeheli

Uff... Wir leiten die FHEM-UI über den HTTP-Proxy Traefik, durch Authelia abgesichert.

In der Browser-Konsole erhielten wir einen HTTP Error 431, Request Header too large. - Das gesamte DOIF wird in der URL übertragen und nicht im Body, per POST.


Der Übeltäter war in unserem Fall Authelia. Im Authelia-Config-YAML müssen die Buffer angepasst werden. Wir haben es nun mal auf 64 KB erhöht:
server:
  address: tcp://0.0.0.0:9091/
  buffers:
    read: 65536
    write: 65536


Danke dir vielmals, Damian fürs Testen!