def METHOD_NAME(self, data):
    """Flush the data to all the E1.31 channels account for spanning universes"""
    if not self._sacn:
        self.activate()
    if data.size != self._config["channel_count"]:
        raise Exception(
            f"Invalid buffer size. {data.size} != {self._config['channel_count']}"
        )
    data = data.flatten()
    current_index = 0
    for universe in range(
        self._config["universe"], self._config["universe_end"] + 1
    ):
        # Calculate offset into the provide input buffer for the channel. There are some
        # cleaner ways this can be done... This is just the quick and dirty
        universe_start = (
            universe - self._config["universe"]
        ) * self._config["universe_size"]
        universe_end = (
            universe - self._config["universe"] + 1
        ) * self._config["universe_size"]
        dmx_start = (
            max(universe_start, self._config["channel_offset"])
            % self._config["universe_size"]
        )
        dmx_end = (
            min(
                universe_end,
                self._config["channel_offset"]
                + self._config["channel_count"],
            )
            % self._config["universe_size"]
        )
        if dmx_end == 0:
            dmx_end = self._config["universe_size"]
        input_start = current_index
        input_end = current_index + dmx_end - dmx_start
        current_index = input_end
        dmx_data = np.array(self._sacn[universe].dmx_data)
        dmx_data[dmx_start:dmx_end] = data[input_start:input_end]
        # Because the sACN library checks for data to be of int type, we have to
        # convert the numpy array into a python list of ints using tolist()
        self._sacn[universe].dmx_data = dmx_data.clip(0, 255).tolist()
        # output = dmx_data.clip(0, 255)
    # This is ugly - weird race condition where loading on startup from a device with a short ID results in the sACN thread trying to send data to NoneType.
    # No idea how to properly handle it - but this stops it breaking and seems to be reasonably resilient. Sorry to whoever stumbles onto it. -Shaun
    try:
        self._sacn.METHOD_NAME()
    except AttributeError:
        _LOGGER.info(
            "Attempted to start sACN thread prior to sACN activating. Restarting sACN thread."
        )
        self.activate()
    # # Hack up a manual flush of the E1.31 data vs having a background thread
    # if self._sacn._output_thread._socket:
    #     for output in list(self._sacn._output_thread._outputs.values()):
    #         self._sacn._output_thread.send_out(output)