Hallo,
ich will in meiner Programmierung der DOIF etwas umstellen und ein etwas umfangreicheres "Master-DOIF" bauen. Dazu wollte ich die if-Kommandos von Perl nutzen.
Mein Skript ist auch schon einigermaßen vorangekommen, aber ich habe ein Problem, das ich nicht gelöst bekomme.
Setze ich den set-Befehl über die Kommandozeile oder in einem "normalen" DOIF ab set Kuechenrollo pct 100
fährt der Rollo gleichmäßigen hoch und bei pct 0 auch runter.
Steuere ich über fhem ("set Kuechenrollo pct 100");
fährt der Rollo immer so ca. 5 % stoppt, fährt weiter usw.
Ich habe intervall schon mal auf 60 gesetzt. Hat aber keine Änderung gebracht.
Hier einmal ein vollständiges Beispiel-DOIF
define di_Test_perl DOIF
## ===== Hitzeschutz AN =====
if ( [07:35] ) {
fhem("set Kuechenrollo pct 20");
fhem("set WZ_Wohnzimmerrollo pct 35");
}
Das Verhalten ist auch dasselbe ob ich zwei Semikolon oder ein Semikolon am Ende der Zeile habe. Auch wenn ich nur einen Rollo steuere, ist das gleiche Phänomen.
Gibt es dafür eine Erklärung?
Also, es gibt absolut keinen Unterschied, ob du set Kuechenrollo pct 100
im FHEM-Modus aufrufst oder fhem ("set Kuechenrollo pct 100");
im Perl-Modus.
Wenn das Verhalten unterschiedlich ist, dann liegt es an etwas anderem.
Wie oft hast du das getestet? Ist das wirklich dauerhaft reproduzierbar? Betrifft das alle Rollos?
Wie sieht der Event-Monitor aus, während das Rollo fährt? Sind da Unterschiede erkennbar?
Ansonsten wäre es wohl noch sinnvoll, wenn du ein list der betroffenen Rollo-Devices postest.
Das Verhalten trifft auf alle Rollos zu, die ich mit dem Set-Befehl anspreche.
Den Event-Monitor muss ich mir morgen einmal anschauen.
Hier schon mal das Listing eines Devices, vielleicht ergibt sich ja daraus etwas.
Internals:
CFGFN
DEF 192.xxx.xx.xxx
DURATION 60
FUUID 689xxxxxx
INTERVAL 60
MOVING stopped
NAME Kuechenrollo
NR 838
NTFY_ORDER 50-Kuechenrollo
SHELLYID shellyplus2pm-1c692045ea50
STATE pct-0
TARGETPCT 0
TYPE Shelly
eventCount 3113
units 0
OLDREADINGS:
READINGS:
2025-08-15 08:08:23 ap disabled open
2025-08-15 08:08:23 ap_clients disabled
2025-08-15 08:08:23 ap_name ShellyPlus2PM-1C692045EA50
2025-08-15 08:08:23 ble enabled
2025-08-15 08:08:23 ble_rpc enabled
2025-08-15 08:08:23 cloud enabled(connected)
2025-08-16 21:17:18 current 0
2025-08-16 21:16:16 current_last 0.762 down
2025-08-16 21:17:18 energy 542.66
2025-08-16 21:18:18 energy_lastMinute 0
2025-08-15 08:08:24 firmware_ID 20250730-063231/1.7.0-gbe7545d
2025-08-15 08:08:24 firmware_current v1.7.0
2025-08-15 08:09:23 firmware_updIcon OK
2025-08-15 08:09:23 firmware_updText -/-
2025-08-16 21:58:24 frequency 50
2025-08-15 08:08:23 input_0 off
2025-08-15 08:08:23 input_0_function single
2025-08-15 08:08:23 input_0_mode switch straight enabled
2025-08-15 08:08:23 input_1 off
2025-08-15 08:08:23 input_1_function detached
2025-08-15 08:08:23 input_1_mode switch straight enabled
2025-08-16 22:46:32 inttemp 38.2
2025-08-16 21:16:16 last_dir down
2025-08-15 08:08:23 login open
2025-08-15 08:08:23 mac 1C:69:20:45:EA:50
2025-08-15 08:08:23 model_ID SNSW-102P16EU
2025-08-15 08:08:23 model_family Plus/Gen2
2025-08-15 08:08:23 model_function switch
2025-08-15 08:08:23 model_name Shelly Plus 2PM
2025-08-15 08:08:23 name Kuechenrollo
2025-08-15 08:08:23 network <html>connected to <a href="http://192.xxx.xxx.xxx">192.xxx.xxx.xxx</a> (Wifi)</html>
2025-08-15 08:08:23 network_DNS -
2025-08-15 08:08:23 network_connection online
2025-08-15 08:08:23 network_ip-address 192.xxx.xxx.xxx
2025-08-16 22:46:32 network_rssi -53
2025-08-15 08:08:23 network_ssid xxxxxxx
2025-08-15 08:08:23 network_wifi_roaming -80
2025-08-15 08:08:23 output_mode O1=up, O2=down
2025-08-16 21:17:18 pct 0
2025-08-16 21:17:18 pfactor 0
2025-08-16 21:17:18 position closed
2025-08-16 21:17:18 power 0
2025-08-16 21:16:16 power_last 155 down
2025-08-15 08:08:23 protection none
2025-08-15 08:08:48 scripts 0
2025-08-15 12:51:18 start_reason HTTP_in
2025-08-16 21:17:18 state pct-0
2025-08-16 14:33:40 stop_reason limit_switch
2025-08-16 22:46:32 uptime 140151
2025-08-16 22:46:32 voltage 238.5
2025-08-15 08:08:24 webhook_cnt 0 / 0 / 0
2025-08-15 08:08:23 webhook_ver 1
helper:
Sets config:ap_disable,ap_enable interval password reboot:noArg update:noArg name clear:disconnects,error,energy,responsetimes actions script_start script_stop closed open stop:noArg pct:slider,0,1,100 delta zero:noArg predefAttr:noArg
StatusCall 0
range_extender disabled
settings_time 1755377192.99494
timer 0
timerCnt 1
hmccu:
Attributes:
genericDeviceType blind
interval 60
maxtime_close 60
maxtime_open 60
mode roller
model shellyplus2pm
room 01.11_Küche,30.50_Shelly,30.90_Rolladen,90.30_Alexaroom
Ich scheine, die Ursache des Problems gefunden zu haben.
In meinem "Master-DOIF" sind viele if-Prüfungen enthalten. Die kommen sich wohl so in die Quere, dass nach Auslösen eines set-Befehls noch eine andere Prüfung greift und auch einen set-Befehl an das jeweilige Device sendet.
Mal schauen, wie ich das gelöst bekomme.
Welche Möglichkeit hätte ich, mit einem DOIF und DOIFELSE Prüfungen vorzunehmen, wo nicht nach der ersten erfolgreichen Bedingungen das DOIF stoppt, sondern die anderen Bedingungen auch noch geprüft werden.
Es gab wohl einmal so etwas wie ein attribut attr do always all oder multiple
. Ich finde aber keinen aktuellen Stand dazu.
Erst einmal ist es ziemlich unsinnig, solche komplexen Prüfungen in einem "Master-DOIF" zu versammeln. Das ist - wie die auftretenden Probleme zeigen - vollkommen unwartbar. So etwas sollte in klar abgegrenzte Perl-Unterprogramme ausgelagert werden.
Zweitens gibt es für die Rollladensteuerung sehr gut ausgetestete Module, die eigentlich alle Features bieten.
Zitat von: romarira am 18 August 2025, 07:39:15. Ich finde aber keinen aktuellen Stand dazu.
DOIF ist nun wirklich umfassend dokumentiert, die Beschreibung des "do"-Attributes findet sich auch in der CommandRef.
LG
pah
P.S.: Es heißt Rollladen, mit 3x "l"
Zitat von: romarira am 18 August 2025, 07:39:15Es gab wohl einmal so etwas wie ein attribut attr do always all oder multiple
. Ich finde aber keinen aktuellen Stand dazu.
Du meinst wohl das Attribut checkall, welches dein gewünschtes Verhalten veranlasst.