       Elixir.Logger.remove_backend(b, [])
     end
   end
+
+  defp maybe_espeak(_message, _channels, nil), do: :ok
+  defp maybe_espeak(message, channels, exe) do
+    if :espeak in channels do
+      spawn System, :cmd, [exe, [message]]
+    end
+    :ok
+  end
 end

    for b <- backends do
      Elixir.Logger.add_backend(b, [])
    end
    {:producer, %{}, dispatcher: GenStage.BroadcastDispatcher}
  end

  def handle_demand(_, state) do

      nil -> "no_function"
    end
    meta_map = Map.new(meta)
    maybe_espeak(message, Map.get(meta_map, :channels, []), state.espeak)
    log = struct(Farmbot.Log, [
      time: time,
      level: level,
