+ Antworten
Ergebnis 1 bis 3 von 3
  1. #1
    Registriert seit
    Mar 2015
    Ort
    Niederlande
    Beiträge
    36

    Standard MessageSink and parallel execution

    Hi Paresy,

    Recently I ran into a performance issue related to MessageSink.

    I have a lighting controller that consists of the following module instances:

    - Lighting Control: contains on/off state, global intensity level and some other settings of a lighting zone. Uses MessageSink to respond to a short press of a button to toggle the on/off state and responds to a long button press to increase or decrease the global intensity level.
    -- Luminaire: defines and controls a lighting fixture. Uses MessageSink to respond to a change of lighting state.
    -- Lighting Scene: defines a scene name
    ---- Luminaire Scene: defines on/off state, color or intensity of a luminaire in a specific scene.

    This is what the object tree looks like:



    A Lighting Control instance usually contains multiple luminaires. I primarily use ArtNet/DMX controlled lights but I also have some Z-Wave devices. My Z-Wave network has a few nodes with low signal quality at the edges of the mesh network. Sometimes these devices do not respond at all, in other cases it takes a few seconds for a dimmer to respond to a command.

    By using independent instances to control luminaires I was hoping to create a lighting control system that would degrade gracefully in case of a communication failure. Unfortunately this is not how it works in practice.

    If a lighting zone uses ArtNet/DMX lighting, the response is instant. If a lighting zone contains a Z-Wave device that is difficult to reach, the response time is several seconds. This is also the case for the DMX lights. I assume this is because MessageSink calls to multiple module instances that are registered to a specific message are executed sequentially instead of in parallel.

    In my opinion this case is well suited for multi-threaded execution. Parallel execution should improve response times, avoid blocking I/O and enable more effective use of resources.

    I haven't tried IPS_RunScriptEx yet to control the Luminaire instance from the Lighting Control instance. In this case this should work well because there is a direct relation between a Lighting Control instance and underlying Luminaire instances. In other situations there is no such relation, when instances of unrelated modules act on a change of a variable. So I think it is still a good idea to enable parallel execution of MessageSink calls.

  2. #2
    Registriert seit
    Feb 2005
    Ort
    Lübeck
    Beiträge
    21,414

    Hi,

    you need to make sure that any long-running execution is never done inside the MessageSink. This will totally block your IP-Symcon in the background. As you suggested, you might want to decouple this by using a timer or a call to any of the IPS_RunScript* functions. I already thought about making MessageSink run in parallel but this has so many implications in the background that i refrained from doing it. You can enable MessageQueueWatch in the special options to see which modules are blocking the "MessageSink" too long.

    paresy

  3. #3
    Registriert seit
    Mar 2015
    Ort
    Niederlande
    Beiträge
    36

    Ok thanks for the info. I wasn't aware of MessageSink limitations.

    I'm now using RunScriptTextEx and it works wonderfully well. Dimming up/down via push buttons also works well know.

Ähnliche Themen

  1. Probleme mit MessageSink nach Update auf 4.3
    Von baba im Forum Entwicklung mit PHP-SDK/Delphi-SDK
    Antworten: 3
    Letzter Beitrag: 28.11.17, 22:01
  2. Status an Parent anpassen (MessageSink?)
    Von baba im Forum Entwicklung mit PHP-SDK/Delphi-SDK
    Antworten: 8
    Letzter Beitrag: 14.05.17, 14:24
  3. too many scripts at once. Dropping execution
    Von MichB im Forum Allgemeine Diskussion
    Antworten: 8
    Letzter Beitrag: 05.01.17, 11:18
  4. Fragen zu RegisterMessage und MessageSink
    Von tommi im Forum Entwicklung mit PHP-SDK/Delphi-SDK
    Antworten: 6
    Letzter Beitrag: 10.10.16, 08:53