summary refs log tree commit diff
path: root/pkgs/servers
diff options
context:
space:
mode:
authorRobert Schütz <robert.schuetz@stud.uni-heidelberg.de>2019-01-10 19:38:38 +0100
committerRobert Schütz <robert.schuetz@stud.uni-heidelberg.de>2019-01-16 15:48:15 +0100
commitbffbdfc67e51240df50e39325a8263ba8e4f2087 (patch)
tree605ccc2a2fbde2f72df17ecfa7fc9d82968e9e27 /pkgs/servers
parent15d8f837c6c9d759912ff61001c9cf77e9cfa187 (diff)
downloadnixpkgs-bffbdfc67e51240df50e39325a8263ba8e4f2087.tar
nixpkgs-bffbdfc67e51240df50e39325a8263ba8e4f2087.tar.gz
nixpkgs-bffbdfc67e51240df50e39325a8263ba8e4f2087.tar.bz2
nixpkgs-bffbdfc67e51240df50e39325a8263ba8e4f2087.tar.lz
nixpkgs-bffbdfc67e51240df50e39325a8263ba8e4f2087.tar.xz
nixpkgs-bffbdfc67e51240df50e39325a8263ba8e4f2087.tar.zst
nixpkgs-bffbdfc67e51240df50e39325a8263ba8e4f2087.zip
esphome: init at 1.10.1
Diffstat (limited to 'pkgs/servers')
-rw-r--r--pkgs/servers/home-assistant/dont-import-platformio-esptool.patch119
-rw-r--r--pkgs/servers/home-assistant/esphome.nix43
2 files changed, 162 insertions, 0 deletions
diff --git a/pkgs/servers/home-assistant/dont-import-platformio-esptool.patch b/pkgs/servers/home-assistant/dont-import-platformio-esptool.patch
new file mode 100644
index 00000000000..21918764436
--- /dev/null
+++ b/pkgs/servers/home-assistant/dont-import-platformio-esptool.patch
@@ -0,0 +1,119 @@
+diff --git a/esphomeyaml/__main__.py b/esphomeyaml/__main__.py
+index 26f42c1..529d2e0 100644
+--- a/esphomeyaml/__main__.py
++++ b/esphomeyaml/__main__.py
+@@ -167,13 +167,10 @@ def compile_program(args, config):
+ 
+ 
+ def upload_using_esptool(config, port):
+-    import esptool
+-
+     path = os.path.join(CORE.build_path, '.pioenvs', CORE.name, 'firmware.bin')
+-    cmd = ['esptool.py', '--before', 'default_reset', '--after', 'hard_reset',
++    cmd = ['@esptool@/bin/esptool.py', '--before', 'default_reset', '--after', 'hard_reset',
+            '--chip', 'esp8266', '--port', port, 'write_flash', '0x0', path]
+-    # pylint: disable=protected-access
+-    return run_external_command(esptool._main, *cmd)
++    return run_external_command(*cmd)
+ 
+ 
+ def upload_program(config, args, host):
+diff --git a/esphomeyaml/platformio_api.py b/esphomeyaml/platformio_api.py
+index df29491..f991701 100644
+--- a/esphomeyaml/platformio_api.py
++++ b/esphomeyaml/platformio_api.py
+@@ -13,12 +13,9 @@ _LOGGER = logging.getLogger(__name__)
+ 
+ 
+ def run_platformio_cli(*args, **kwargs):
+-    import platformio.__main__
+-
+     os.environ["PLATFORMIO_FORCE_COLOR"] = "true"
+-    cmd = ['platformio'] + list(args)
+-    return run_external_command(platformio.__main__.main,
+-                                *cmd, **kwargs)
++    cmd = ['@platformio@/bin/platformio'] + list(args)
++    return run_external_command(*cmd, **kwargs)
+ 
+ 
+ def run_platformio_cli_run(config, verbose, *args, **kwargs):
+diff --git a/esphomeyaml/util.py b/esphomeyaml/util.py
+index eebb4b7..9e9e58f 100644
+--- a/esphomeyaml/util.py
++++ b/esphomeyaml/util.py
+@@ -4,6 +4,7 @@ import io
+ import logging
+ import re
+ import sys
++import subprocess
+ 
+ _LOGGER = logging.getLogger(__name__)
+ 
+@@ -79,42 +80,25 @@ class RedirectText(object):
+         return True
+ 
+ 
+-def run_external_command(func, *cmd, **kwargs):
+-    def mock_exit(return_code):
+-        raise SystemExit(return_code)
+-
+-    orig_argv = sys.argv
+-    orig_exit = sys.exit  # mock sys.exit
++def run_external_command(*cmd, **kwargs):
+     full_cmd = u' '.join(shlex_quote(x) for x in cmd)
+     _LOGGER.info(u"Running:  %s", full_cmd)
+ 
+-    orig_stdout = sys.stdout
+-    sys.stdout = RedirectText(sys.stdout)
+-    orig_stderr = sys.stderr
+-    sys.stderr = RedirectText(sys.stderr)
+-
+     capture_stdout = kwargs.get('capture_stdout', False)
+     if capture_stdout:
+-        cap_stdout = sys.stdout = io.BytesIO()
++        cap_stdout = io.BytesIO()
++    else:
++        cap_stdout = sys.stdout
+ 
+     try:
+-        sys.argv = list(cmd)
+-        sys.exit = mock_exit
+-        return func() or 0
+-    except KeyboardInterrupt:
+-        return 1
+-    except SystemExit as err:
+-        return err.args[0]
++        completed_process = subprocess.run(cmd,
++                                           stdout=RedirectText(cap_stdout),
++                                           stderr=RedirectText(sys.stderr))
++        return completed_process.returncode
+     except Exception as err:  # pylint: disable=broad-except
+         _LOGGER.error(u"Running command failed: %s", err)
+         _LOGGER.error(u"Please try running %s locally.", full_cmd)
+     finally:
+-        sys.argv = orig_argv
+-        sys.exit = orig_exit
+-
+-        sys.stdout = orig_stdout
+-        sys.stderr = orig_stderr
+-
+         if capture_stdout:
+             # pylint: disable=lost-exception
+             return cap_stdout.getvalue()
+diff --git a/setup.py b/setup.py
+index 78a5378..8ce80de 100755
+--- a/setup.py
++++ b/setup.py
+@@ -23,12 +23,10 @@ DOWNLOAD_URL = '{}/archive/{}.zip'.format(GITHUB_URL, const.__version__)
+ 
+ REQUIRES = [
+     'voluptuous>=0.11.1',
+-    'platformio>=3.5.3',
+     'pyyaml>=3.12',
+     'paho-mqtt>=1.3.1',
+     'colorlog>=3.1.2',
+     'tornado>=5.0.0',
+-    'esptool>=2.3.1',
+     'typing>=3.0.0',
+     'protobuf>=3.4',
+     'tzlocal>=1.4',
diff --git a/pkgs/servers/home-assistant/esphome.nix b/pkgs/servers/home-assistant/esphome.nix
new file mode 100644
index 00000000000..e089c83239b
--- /dev/null
+++ b/pkgs/servers/home-assistant/esphome.nix
@@ -0,0 +1,43 @@
+{ lib, python3, fetchpatch, substituteAll, platformio, esptool }:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "esphomeyaml";
+  version = "1.10.1";
+
+  src = python3.pkgs.fetchPypi {
+    inherit pname version;
+    sha256 = "426cd545b4e9505ce5b4f5c63d2d54cb038f93fe3ba9d4d56b6b6431b222485d";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./dont-import-platformio-esptool.patch;
+      inherit platformio esptool;
+    })
+  ];
+
+  postPatch = ''
+     # typing is part of the standard library since Python 3.5
+     substituteInPlace setup.py --replace "'typing>=3.0.0'," ""
+  '';
+
+  propagatedBuildInputs = with python3.pkgs; [
+    voluptuous pyyaml paho-mqtt colorlog
+    tornado protobuf tzlocal pyserial
+  ];
+
+  checkPhase = ''
+    $out/bin/esphomeyaml tests/test1.yaml compile
+    $out/bin/esphomeyaml tests/test2.yaml compile
+  '';
+
+  # Platformio will try to access the network
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Make creating custom firmwares for ESP32/ESP8266 super easy";
+    homepage = https://esphomelib.com/esphomeyaml;
+    license = licenses.mit;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}