Ankündigung

Einklappen
Keine Ankündigung bisher.

Help needed on producing a "Switch Inhibition" reset module

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    HS/FS Help needed on producing a "Switch Inhibition" reset module

    Hello all,

    First of all I'd like to apologise for writing in English, but unfortunately my German language skills are still very elementary. HS/FS resources are very scarce online (Gira akademie only covers very trivial aspects of the platform), and the built-in help one can find in Experte looks like a cleaned-up version of a Google Translate translation.

    I have been trying to write a logic module to reset the state of an "Inhibition" variable which is supposed to override the switch variable of loads. Here's an example:

    On the actuator: Consider 3 switching channels, A, B and C, associated with the following group addresses:
    A Switch: 0/0/1
    B Switch: 0/0/2
    C Switch: 0/0/3

    A Status: 0/1/1 (not of much use for this scenario, but it's available nonetheless)
    B Status: 0/1/2 (not of much use for this scenario, but it's available nonetheless)
    C Status: 0/1/3 (not of much use for this scenario, but it's available nonetheless)

    A Inhibition: 1/0/1
    B Inhibition: 1/0/1
    C Inhibition: 1/0/1
    (Same group address assigned to all three communication objects for inhibition)

    The "Inhibition" communication object on the actuator is used to implement and AND gate separatedly for each channel. However, all three inhibition objects share the same group address, we don't need to inhibit independently. For example, in order for load connected to output A above to be switch on, BOTH 0/0/1 AND 1/0/1 need to be set to a value of "1".

    The goal is to leverage the inhibition functionality to provide the user with a "Master Off with memory" feature. For example, if loads A and B are "on" and load C is "off", the user can switch all loads (although in our example, it only happens that A and B are on) off by setting 1/0/1 to "0". Then suppose the user wants to revert to the previous setting. By setting 1/0/1 to "1" again, the previous state will be restored (A, B on, C off). So far so good, one does not need complicated logic to perform this, it's integrated even in cheaper switch actuators.

    However, there is one feature I would like to add which requires a bit of further development. Suppose that the Inhibition function is active (i.e. last value transmitted via group address 1/0/1 was "0"). In this case loads A, B and C are off, regardless of the value of the switch communication objects. I want to achieve the following: if the user chooses to individually change the state of any of these 3 loads (say, send a "1" to 0/0/1 while Inhibition is active), I want the HS to first set the value of the other loads to "off" (0/0/2 --> "0", 0/0/3 --> "0", then cancel the Inhibition state (1/0/1 --> "1") and then apply the individual setting for load A that the user initiated by turning the channel on in the first place (0/0/1 --> "1"). And I want to do that in a way that it can scale to more loads, and preferably without hard-coding all the logic so that it is not reuseable. Oh, and I don't want to use different addresses for user commands and switch control within the Homeserver logic, because I want the user to be able to switch loads on and off even if the Homeserver is not in operation (provided they have manually turned inhibition off, naturally).

    I thought I could use a combination of the "Binary Trigger" and "Lock-out" to this effect, but the program behaves in a very bizzare way (it somehow enters a loop). Is it my idea, or is flow-control very limited within the logic functionality of the HS/FS?

    I guess the problem is I don't really understand how the logic functionality of the HS/FS works. I would be grateful if one could provide a few hints as to how this could be accomplished, and/or whether it can be programmed using the logic editor of the experte at all.

    More specifically, I am looking for a module (or combination of modules) that takes into account the last group address carrying a non-0 value among a group of addresses, defer the output of that value for a little while, set the value of all other addresses in the group to 0, set Inhibition to "1", then send (or resend) the deferred value to the bus. I guess my problem is how do I generate the action for the group addresses not involved in any user action so far?

    I don't expect anything that works out of the box, just a general direction in case you can think of something I can test out.

    Thank you in advance,
    George

    P.S. Does anyone know of any release dates for the new HS/FS firmware (on the Gira website it's now stated for a 03/2013 release after several delays)? I'm looking forward to the new "screen code lock" functionality for the Gira Control Interface I saw in the press release screenshots.

    #2
    I think I might have found a way to do this. I'm still puzzled by the fact that it seems to be working, but I'll share the logic here in case anyone is interested. Feel free to post your comments or fixes:

    The scenario is the same as in the previous post, but I've added a few extra triggers. The inhibited load will now also be turned on if a "brightness value" other than zero is received during inhibition, or if a dimming increase telegram is received during operation. The various logic elements are meant to provide the following functionality:

    1) Only perform actions if inhibit is active, and the load in question is receiving a control telegram which is meant to turn it on in some way
    2) We need to disable inhibition for this to work. But at the same time, we want to make sure we have turned off all other inhibited loads in the same inhibition group. This is why the delays are introduced (first turn off other loads, then send inhibition).
    3) All dimmers need to be configured so that they restore the last brightness value when an on telegram is received for this to work properly
    4) I haven't tested extensively with dimmers, I don't have any in this installation right now. Can someone provide some feedback if they can spare the time?
    5) All involved communication objects have the following properties set: Query during starting, Only send in case of change, and the transfer flag. Query during starting is not a good thing, I am not sure if this will work reliably without it though...
    6) I believe that sending the brightness value again after a delay is redundant, but I've added it anyhow. Since the dimmer should be configured to restore brightness upon the receipt of an on telegram, we don't need to send the user selected brightness value again after the load has been turned on and inhibition off. This is probably the reason why this logic won't send the duplicate value after all, since the brightness has already been set by a previous telegram it received.
    7) I can't remember why I have fed input E1 of the first AND gate (upper left corner) with both the value of 0/0/2 and the output of the binary trigger in the lower centre. Maybe that's redundant too. In any case, it seems to be working as expected, so maybe I'll test without it to see if it still behaves the way it's meant to.

    Here's what did the trick eventually (attachment):

    inhibitlogic.png

    Kommentar


      #3
      I verified the link between input E1 of the first AND gate is redundant. Additionally, I unset the "Query during start" from all com objects apart from the inhibition object (0/7/0). I also forgot to mention that I have set the initialization value of 0/7/0 to "1". This way the server will assume inhibition is off (loads are inhibited with a logical 0) in case the read request times out, which should be the most common case.

      Here's a slightly cleaned up version:

      inhibitlogic2.png

      Kommentar


        #4
        Turns out more logic was redundant. Here's another more minimal version:

        inhibitlogic3.png

        Kommentar

        Lädt...
        X