IPS_Sleep innerhalb eines Moduls verwenden oder vermeiden?

Guten Morgen,

ich habe eine Modul, in der es eine Methode gibt mehrere Variablen zu schalten.

Dies ist generell kein Problem mit einem Array und einer Foreach Schleife.

Da es sich bei den Variablen um Homematic und Homeatic IP Aktoren handelt, muss ich ja zwischen zwei Aktoren eine kurze Verzögerung einbauen, um die Funkhygiene zu gewährleisten.

Dies habe ich in der Vergangenheit mit IPS_Sleep(250); gemacht.

Ich meine in Erinnerung zu haben, dass man IPS_Sleep vermeiden sollte.

Ich müsste es dann über RegisterTimer lösen, was generell auch kein Problem darstellt. Der Programmieraufwand ist aber aus meiner Sicht wesentlich größer.

Wie sehr ihr das und wie habt ihr es gelöst?

Uli

Hast du das mal entsprechend getestet? Ich hätte jetzt erwartet, dass die CCU sich um soetwas kümmert, sodass zwischen HmRF und HmIP Befehlen kein Sleep notwendig wäre.

Ich würde dies ggf. einstellbar machen. Denn alle kabelgebundenen Systeme (z.B. LCN, KNX) benötigen soetwas nicht. Du musst nur die 30 Sekunden im Hinterkopf behalten. Wenn das passt, dann ist ein Sleep sicherlich vertretbar. (Dein Skript läuft ja nicht ständig)

paresy

Guten Morgen Michael,

danke für deine Ausführung und „Freigabe“ zur Verwendung von IPS_Sleep :slight_smile:

Das ist mir noch nicht bekannt, bzw. habe ich noch nicht gelesen.

Ich meine, wenn bei jedem HM / HmIP Aktor nur jeweils ein Datenpunkt anzusteuern ist, dann kann funktioniert es.

Wenn das Gerät aber vier Datenpunkte hat z.B. HmIP-ASIR:


// Erste Alarmsirene
$id = 12345;
HM_WriteValueInteger($id, 'ACOUSTIC_ALARM_SELECTION', $acousticSignal);
HM_WriteValueInteger($id, 'OPTICAL_ALARM_SELECTION', $opticalSignal);
HM_WriteValueInteger($id, 'DURATION_UNIT', $durationUnit);
HM_WriteValueInteger($id, 'DURATION_VALUE', $durationValue);

// ohne IPS_Sleep(250);

// Zweite Alarmsirene
$id = 98765;
HM_WriteValueInteger($id, 'ACOUSTIC_ALARM_SELECTION', $acousticSignal);
HM_WriteValueInteger($id, 'OPTICAL_ALARM_SELECTION', $opticalSignal);
HM_WriteValueInteger($id, 'DURATION_UNIT', $durationUnit);
HM_WriteValueInteger($id, 'DURATION_VALUE', $durationValue);

dann kollidiert das.

Ich muss das die Tage noch einmal nachstellen.

Uli

Hallo Michael,

ich habe es jetzt mal mit HmIP Komponenten ohne IPS_Sleep ausprobiert.

2 HmIP-ASIR Geräte, ohne Fehler

3 HmIP-PS, ohne Fehler

3 HmIP-PS + 1 HmIP-MP3P, teilweise mit Fehler beim HmIP-MP3P

Man merkt auch bei einer Einzelschaltung, dass der HmIP-MP3P manchmal sehr träge ist, bzw. es etwas länger dauert, bis er auf einen neue Farbe umschaltet, das ist beim HmIP-BSL ganz anders, flott ist der…

Mein Eindruck ist:

  1. ohne IPS_Sleep funktioniert es, hier kommt es aber auf die Aktoren an, die geschaltet werden

  2. bei manchen Aktoren sollte man besser IPS_Sleep verwenden

  3. generelles Verwenden von IPS_Sleep entzerrt den Funkverkehr

Für mich werde ich Punkt 3 verwenden.

Jemand andere Erfahrung?

Uli

Das ist auch meine Erfahrung. Der Klassiker: morgens zum Sonnenaufgang alle Rollladen hochfahren. Ohne Sleep geht das selten gut.

Moin,

Heizungsgruppen sind auch nett, wenn man z. B. das Haus verlässt und sich das Runterregeln lohnt :wink: Ich verwende immer sleep anstelle von ips_sleep was bei mir bislang zu keinerlei Problemen führte.

Gruß
Hans

Ja, IPS_sleep ist ein Relikt aus alten Zeiten als es noch kein sleep/usleep gab, das Millisekunden unterstützte.