Wie führt man ein Python Script aus?

Begonnen von TheMonumental, 10 Juli 2021, 13:49:40

Vorheriges Thema - Nächstes Thema

TheMonumental

Hallo,

Ich habe ein Schallpegelmessgerät an meinem Raspi angeschlossen und bekomme alle 5 sekunden eine Info darüber wie laut es gerade ist.
Jetzt will ich zusätzlich dazu eine Audio-Aufnahme machen

jedes mal wenn die Lautstärke > 50 ist und das Gerät nicht im Aufnahme modus ist.

Die Audio-Aufnahme starte ich über ein python-Skript mit pyAudio.
Über das Terminal und über die IDE lassen sich so auch bereits Audio-Dateien erzeugen.


Ich verstehe noch nicht so ganz wie ich jetzt das skript über FHEM ausführe.

(siehe Everything.jpg)

Ich habe mir für die Aufnahme ein Dummy Gerät "RecordingSound" angelegt
und ein notify "ActOnRecording" angelegt.

Wenn ich bei meinem Dummy Gerät auf ON drücke wird "ActOnRecording" ausgeführt.
Das Notify ist folgendermaßen definiert:


RecordingSound:on {system("python3 /home/pi/Desktop/AudioRecordings/Record30Secs.py");;;; fhem "set RecordingSound off"}


Und mein Skript sieht folgendermaßen aus:


import pyaudio
import wave
import datetime

form_1 = pyaudio.paInt16 # 16-bit resolution
chans = 1 # 1 channel
samp_rate = 44100 # 44.1kHz sampling rate
chunk = 4096 # 2^12 samples for buffer
record_secs = 30 # seconds to record
dev_index = 1 # device index found by p.get_device_info_by_index(ii)
wav_output_filename = '/home/pi/Desktop/AudioRecordings/{date:%Y-%m-%d_%H:%M:%S}.wav'.format( date=datetime.datetime.now() ) # name of .wav file

audio = pyaudio.PyAudio() # create pyaudio instantiation

# create pyaudio stream
stream = audio.open(format = form_1,rate = samp_rate,channels = chans, \
                    input_device_index = dev_index,input = True, \
                    frames_per_buffer=chunk)
print("recording")
frames = []

# loop through stream and append audio chunks to frame array
for ii in range(0,int((samp_rate/chunk)*record_secs)):
    data = stream.read(chunk)
    frames.append(data)

print("finished recording")

# stop the stream, close it, and terminate the pyaudio instantiation
stream.stop_stream()
stream.close()
audio.terminate()

# save the audio frames as .wav file
wavefile = wave.open(wav_output_filename,'wb')
wavefile.setnchannels(chans)
wavefile.setsampwidth(audio.get_sample_size(form_1))
wavefile.setframerate(samp_rate)
wavefile.writeframes(b''.join(frames))
wavefile.close()


In der Datei "Logfile.jpg" seht ihr einen Auschnitt von dem was passiert wenn ich auf ON drücke.

Das sind fast diesselben Meldungen die ich auch über das Terminal und über die IDE bekomme wenn ich das Skript ausführe.
nur dass er niemals zu dem

print("recording")
..
print("finished recording")

kommt, die Lampe des Dummy-Geräts geht auch nicht an und eine Audio-Datei wird auch nicht erstelllt.
und ich weiß jetzt nicht mehr weiter.

Falls mir da jemand behilflich sein kann wäre das super.

Otto123

Hi,

Eine spontane Idee:
Der user fhem ist normalerweise nicht in der Gruppe audio. Hast Du ihn dort hinein getan?
sudo usermod -aG audio fhem

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

TheMonumental

Hallo Otto,

Ich hab den Befehl mal ausgeführt, und dann nochmal versucht das Skript über "On" zu starten.

Leider hat sich nichts geändert.

Wernieman

Du bekommst sehrviele fehlermeldungen bezüglich der Sound-Card.
Deshalb: Funktioniert das Script ohne FHEM?
Mit welchem User bisher getestet?

Bzw:
Als Du FHEM in die Gruppe audio aufgenommen hast, hast Du fhem anschließen neu gestartet?
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

TheMonumental

Ah der neustart hat noch gefehlt.
Vielen lieben dank.

Um deine Fragen noch zu beantworten:
Das Script hat ohne FHEM funktioniert.

als user su und als user pi
sowohl im terminal als auch über die IDE.


Jetzt fehlt mir noch noch die Möglichkeit den ON-Wert zu setzen wenn das Soundlevel von meinem Gerät > 50 ist.

Otto123

Falls der Code aus der DEF ist:
RecordingSound:on {system("python3 /home/pi/Desktop/AudioRecordings/Record30Secs.py");;;; fhem "set RecordingSound off"}
würde ein semikolon reichen :
RecordingSound:on {system("python3 /home/pi/Desktop/AudioRecordings/Record30Secs.py"); fhem "set RecordingSound off"}
Dein Script wird fhem blockieren.
Wenn set RecordingSound am Ende des Scripts erfolgen muss, würde ich den Befehl im Script integrieren und das Script nicht blockierend starten.
Es gibt für python eine FHEM Library um das zu implementieren.

Was Du bei Deiner letzten Frage als Hilfe brauchst erschließt sich mir nicht. Mir fehlen wahrscheinlich Infos.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

TheMonumental

Also ich werd mal versuchen das hinzubekommen.
Falls aber noch jemand was dazu sagen kann wäre ich sehr dankbar.

im Screenshot sieht man die readings des Geräts.

Bisher denke ich dass das Event so definiert werden muss:


define      pt8005_SoundLevel_over     notify     pt8005:soundlevel>50     set RecordingSound on


ich hab aber noch keine konkreten Beispiele gefunden, deswegen weiß ich nicht ob das so korrekt ist.

Otto123

#7
Du kannst ein notify vom Eventmonitor erzeugen lassen: https://wiki.fhem.de/wiki/Notify

Du kannst keinen Trigger mit größer als machen, aber in dem Wikiartikel ist notify in vielen Situationen erklärt und es sind entsprechende Beispiele (Perl Code) wie es einfach zumachen ist. So in etwa:
define pt8005_SoundLevel_over notify pt8005:soundlevel:.* { if ($EVTPART1 > 50) { fhem("set RecordingSound on") } }

Suchreihenfolge nach Beispielen:
commandref
Wiki
Forum
Internet - Vorsicht! bei den Artikel und Videos aufs Datum achten! FHEM entwickelt sich täglich weiter, was 2017 mal "state of the art" war muss heute nicht mehr stimmen.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

TheMonumental

@Otto
Korrekt dass ist der Code aus der DEF.
Ich hab überall gelesen, dass mit den  {}

Perl-Code ausgeführt wird, und dass man dann gewisse zeichen escapen muss.
um ein ; darzustellen, muss man dann ;; schreiben.

ich werde deinen rat befolgen und aus dem skript heraus den schalter wieder auf OFF setzen und les mir mal das Wiki durch.

Hoffentlich krieg ich dass dann hin.

Otto123

ja das mit den semikolons ist nicht einfach, hier die Doku https://fhem.de/commandref_DE.html#command
Bedeutet:
FHEM Kommando in der FHEM Befehlszeile und im DEF Editor: einfach
Im PerlCode in der FHEM Befehlszeile, in der Raw Definition und der fhem.cfg: doppelt
Bei Verschachtelung dieser beiden Typen wird es dann schwieriger :)
Meist ist es egal: viel hilft nicht viel - aber wird toleriert - z.B. beim FHEM sleep Befehl führt es aber zu anderen/unerwarteten Ergebnissen.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

TheMonumental

Wie geb ich denn einen Befehl aus Python an FHEM weiter?

Also ich hab jetzt erstmal das hier gemacht.
https://tyrotechsoft.de/post/fhem-python3-fhem-integration/

aber beim ausführen vom skript sagt er mir jetzt:


2021.07.10 16:26:46 3: FHEMWEB WEB CSRF error: csrf_448548653699931 ne csrf_112318195249757 for client WEB_192.168.2.120_53173 / command set RecordingSound off. For details see the csrfToken FHEMWEB attribute.
Traceback (most recent call last):
  File "/home/pi/Desktop/AudioRecordings/Record30Secs.py", line 4, in <module>
    import fhem
ModuleNotFoundError: No module named 'fhem'
2021.07.10 16:26:47 3: ActOnRecording return value: -1



diese beiden Zeilen hab ich ende meines scripts hinzugefügt:


_FHEM = fhem.Fhem("localhost")
_FHEM.send_cmd("set RecordingSound off")



aus meiner IDE bekomm ich die Meldung:
Zitat
recording
finished recording
Failed to connect to localhost:7072
Failed to send msg, len=22. Not connected.

Otto123

ZitatNo module named 'fhem'
da ist doch beim setup was schief gegangen?
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

TheMonumental

also mit dem befehl

pip3 list

seh ich das modul.

mit
pip list
jedoch nicht.

also geh ich davon aus, dass fhem eine andere version für python benutzt.

TheMonumental

Also ich hab mir mal die geladenen Module ausgeben lassen im skript mit help("modules")

in der IDE:

DEBUG:matplotlib:loaded modules: ['sys', 'builtins', '_frozen_importlib', '_imp', '_thread', '_warnings', '_weakref', 'zipimport', '_frozen_importlib_external', '_io', 'marshal', 'posix', 'encodings', 'codecs', '_codecs', 'encodings.aliases', 'encodings.utf_8', '_signal', '__main__', 'encodings.latin_1', 'io', 'abc', '_abc', 'site', 'os', 'stat', '_stat', 'posixpath', 'genericpath', 'os.path', '_collections_abc', '_sitebuiltins', '_bootlocale', '_locale', 'types', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap_external', 'warnings', 'importlib.util', 'importlib.abc', 'importlib.machinery', 'contextlib', 'collections', 'operator', '_operator', 'keyword', 'heapq', '_heapq', 'itertools', 'reprlib', '_collections', 'functools', '_functools', 'logilab', 'mpl_toolkits', 'sitecustomize', 'runpy', 'pkgutil', 'weakref', '_weakrefset', 'thonny', 'platform', 're', 'enum', 'sre_compile', '_sre', 'sre_parse', 'sre_constants', 'copyreg', 'subprocess', 'time', 'signal', 'errno', '_posixsubprocess', 'select', 'selectors', 'collections.abc', 'math', 'threading', 'traceback', 'linecache', 'tokenize', 'token', 'logging', 'string', '_string', 'atexit', 'typing', 'typing.io', 'typing.re', 'thonny.plugins', 'thonny.plugins.cpython', 'tkinter', '_tkinter', 'tkinter.constants', 'tkinter.messagebox', 'tkinter.commondialog', 'tkinter.ttk', 'thonny.ui_utils', 'queue', '_queue', 'textwrap', 'tkinter.font', 'tkinter.filedialog', 'tkinter.dialog', 'fnmatch', 'thonny.misc_utils', 'shlex', 'thonny.tktextext', 'thonny.common', 'ast', '_ast', 'thonny.languages', 'gettext', 'locale', 'thonny.running', 'thonny.editors', 'thonny.base_file_browser', 'datetime', '_datetime', 'thonny.codeview', 'thonny.roughparse', 'thonny.workdlg', 'thonny.plugins.backend_config_page', 'thonny.backend', 'pathlib', 'ntpath', 'urllib', 'urllib.parse', 'thonny.config_ui', 'thonny.terminal', 'thonny.plugins.cpython.cpython_backend', 'dis', 'opcode', '_opcode', 'inspect', 'pydoc', 'thonny.jedi_utils', 'encodings.ascii', 'faulthandler', 'thonny.plugins.backend', 'thonny.plugins.backend.birdseye_backend', 'thonny.plugins.backend.dock_user_windows_backend', 'thonny.plugins.backend.flask_backend', 'thonny.plugins.backend.matplotlib_backend', 'thonny.plugins.backend.pgzero_backend', 'pgzero', 'pyaudio', '_portaudio', 'wave', 'audioop', 'struct', '_struct', 'chunk', 'asyncio', 'asyncio.base_events', 'concurrent', 'concurrent.futures', 'concurrent.futures._base', 'socket', '_socket', 'ssl', '_ssl', 'base64', 'binascii', 'asyncio.constants', 'asyncio.coroutines', 'asyncio.base_futures', 'asyncio.format_helpers', 'asyncio.log', 'asyncio.events', 'contextvars', '_contextvars', 'asyncio.base_tasks', '_asyncio', 'asyncio.futures', 'asyncio.protocols', 'asyncio.sslproto', 'asyncio.transports', 'asyncio.tasks', 'asyncio.locks', 'asyncio.runners', 'asyncio.queues', 'asyncio.streams', 'asyncio.subprocess', 'asyncio.unix_events', 'asyncio.base_subprocess', 'asyncio.selector_events', 'ctypes', '_ctypes', 'ctypes._endian', 'curses', '_curses', 'dbm', 'dbm.ndbm', '_dbm', 'distutils', 'distutils.command', 'email', 'email.mime', 'ensurepip', 'glob', 'tempfile', 'shutil', 'zlib', 'bz2', '_compression', '_bz2', 'lzma', '_lzma', 'pwd', 'grp', 'random', 'hashlib', '_hashlib', '_blake2', '_sha3', 'bisect', '_bisect', '_random', 'html', 'html.entities', 'http', 'json', 'json.decoder', 'json.scanner', '_json', 'json.encoder', 'lib2to3', 'lib2to3.fixes', 'lib2to3.pgen2', 'multiprocessing', 'multiprocessing.context', 'multiprocessing.process', 'multiprocessing.reduction', 'pickle', '_compat_pickle', '_pickle', 'array', '__mp_main__', 'multiprocessing.dummy', 'multiprocessing.dummy.connection', 'pydoc_data', 'sqlite3', 'sqlite3.dbapi2', '_sqlite3', 'test', 'test.libregrtest', 'test.libregrtest.cmdline', 'argparse', 'test.support', 'gc', 'logging.handlers', 'nntplib', 'email.header', 'email.quoprimime', 'email.base64mime', 'email.errors', 'email.charset', 'email.encoders', 'quopri', 'sysconfig', 'unittest', 'unittest.result', 'unittest.util', 'unittest.case', 'difflib', 'pprint', 'unittest.suite', 'unittest.loader', 'unittest.main', 'unittest.runner', 'unittest.signals', 'urllib.error', 'urllib.response', 'test.support.testresult', 'xml', 'xml.etree', 'xml.etree.ElementTree', 'xml.etree.ElementPath', 'copy', 'pyexpat.errors', 'pyexpat.model', 'pyexpat', '_elementtree', 'gzip', 'resource', '_sysconfigdata_m_linux_arm-linux-gnueabihf', 'test.libregrtest.main', 'test.libregrtest.runtest', 'test.libregrtest.refleak', 'test.libregrtest.save_env', '_multiprocessing', 'test.libregrtest.setup', 'test.libregrtest.utils', 'venv', 'wsgiref', 'xml.dom', 'xml.dom.domreg', 'xml.parsers', 'xml.sax', 'xml.sax.xmlreader', 'xml.sax.handler', 'xml.sax._exceptions', 'xmlrpc', 'fhem', 'urllib.request', 'http.client', 'email.parser', 'email.feedparser', 'email._policybase', 'email.utils', 'email._parseaddr', 'calendar', 'email.message', 'uu', 'email._encoded_words', 'email.iterators', 'Crypto', 'Crypto.Cipher', 'Crypto.Hash', 'Crypto.Protocol', 'Crypto.PublicKey', 'Crypto.Random', 'Crypto.Random.OSRNG', 'Crypto.Random.OSRNG.posix', 'Crypto.Random.OSRNG.rng_base', 'Crypto.Util', 'Crypto.Util.py3compat', 'Crypto.Random._UserFriendlyRNG', 'Crypto.Random.Fortuna', 'Crypto.Random.Fortuna.FortunaAccumulator', 'Crypto.pct_warnings', 'Crypto.Random.Fortuna.SHAd256', 'Crypto.Hash.SHA256', 'Crypto.Hash.hashalgo', 'Crypto.Random.Fortuna.FortunaGenerator', 'Crypto.Util.number', 'Crypto.PublicKey._fastmath', 'Crypto.Util._number_new', 'Crypto.Util.Counter', 'Crypto.Util._counter', 'Crypto.Cipher.AES', 'Crypto.Cipher.blockalgo', 'Crypto.Cipher._AES', 'Crypto.SelfTest', 'Crypto.SelfTest.Cipher', 'Crypto.SelfTest.Hash', 'Crypto.SelfTest.Protocol', 'Crypto.SelfTest.PublicKey', 'Crypto.SelfTest.Random', 'Crypto.SelfTest.Random.Fortuna', 'Crypto.SelfTest.Random.OSRNG', 'Crypto.SelfTest.Signature', 'Crypto.SelfTest.Util', 'Crypto.Signature', 'IPython', '__future__', 'IPython.core', 'IPython.core.getipython', 'IPython.core.release', 'IPython.core.application', 'traitlets', 'traitlets.traitlets', 'six', 'traitlets.utils', 'traitlets.utils.getargspec', 'traitlets.utils.importstring', 'ipython_genutils', 'ipython_genutils._version', 'ipython_genutils.py3compat', 'ipython_genutils.encoding', 'traitlets.utils.sentinel', 'traitlets.utils.bunch', 'traitlets._version', 'traitlets.config', 'traitlets.config.application', 'decorator', 'traitlets.config.configurable', 'traitlets.config.loader', 'ipython_genutils.path', 'ipython_genutils.text', 'ipython_genutils.importstring', 'IPython.core.crashhandler', 'IPython.core.ultratb', 'IPython.core.debugger', 'bdb', 'IPython.utils', 'IPython.utils.PyColorize', 'IPython.utils.coloransi', 'IPython.utils.ipstruct', 'IPython.utils.py3compat', 'IPython.utils.encoding', 'IPython.utils.colorable', 'pygments', 'pygments.util', 'IPython.utils.ulinecache', 'IPython.utils.openpy', 'IPython.core.excolors', 'IPython.testing', 'IPython.testing.skipdoctest', 'pdb', 'cmd', 'code', 'codeop', 'IPython.core.display_trap', 'IPython.utils.path', 'IPython.utils.process', 'IPython.utils._process_posix', 'pexpect', 'pexpect.exceptions', 'pexpect.utils', 'pexpect.expect', 'pexpect.pty_spawn', 'pty', 'tty', 'termios', 'ptyprocess', 'ptyprocess.ptyprocess', 'fcntl', 'ptyprocess.util', 'pexpect.spawnbase', 'pexpect.run', 'IPython.utils._process_common', 'IPython.utils.decorators', 'IPython.utils.data', 'IPython.utils.terminal', 'IPython.utils.sysinfo', 'IPython.utils._sysinfo', 'IPython.core.profiledir', 'IPython.paths', 'IPython.utils.importstring', 'IPython.terminal', 'IPython.terminal.embed', 'IPython.core.compilerop', 'IPython.core.magic_arguments', 'IPython.core.error', 'IPython.utils.text', 'IPython.core.magic', 'getopt', 'IPython.core.oinspect', 'IPython.core.page', 'IPython.core.display', 'mimetypes', 'IPython.lib', 'IPython.lib.security', 'getpass', 'IPython.lib.pretty', 'IPython.utils.dir2', 'IPython.utils.wildcard', 'IPython.utils.signatures', 'pygments.lexers', 'pygments.lexers._mapping', 'pygments.modeline', 'pygments.plugin', 'pygments.lexers.python', 'pygments.lexer', 'pygments.filter', 'pygments.filters', 'pygments.token', 'pygments.regexopt', 'pygments.unistring', 'pygments.formatters', 'pygments.formatters._mapping', 'pygments.formatters.html', 'pygments.formatter', 'pygments.styles', 'IPython.core.inputsplitter', 'IPython.core.inputtransformer', 'IPython.core.splitinput', 'IPython.utils.tokenize2', 'IPython.utils._tokenize_py3', 'IPython.core.interactiveshell', 'pickleshare', 'IPython.core.prefilter', 'IPython.core.autocall', 'IPython.core.macro', 'IPython.core.shadowns', 'IPython.core.alias', 'IPython.core.builtin_trap', 'IPython.core.events', 'IPython.core.displayhook', 'IPython.core.displaypub', 'IPython.core.extensions', 'IPython.core.formatters', 'IPython.utils.sentinel', 'IPython.core.history', 'IPython.core.logger', 'IPython.core.payload', 'IPython.core.usage', 'IPython.display', 'IPython.lib.display', 'IPython.utils.io', 'IPython.utils.capture', 'IPython.utils.strdispatch', 'IPython.core.hooks', 'IPython.utils.syspathcontext', 'IPython.utils.tempdir', 'IPython.utils.contexts', 'IPython.terminal.interactiveshell', 'prompt_toolkit', 'prompt_toolkit.interface', 'prompt_toolkit.application', 'prompt_toolkit.buffer', 'prompt_toolkit.auto_suggest', 'prompt_toolkit.filters', 'prompt_toolkit.filters.base', 'prompt_toolkit.utils', 'wcwidth', 'wcwidth.wcwidth', 'wcwidth.table_wide', 'wcwidth.table_zero', 'six.moves', 'prompt_toolkit.filters.cli', 'prompt_toolkit.enums', 'prompt_toolkit.key_binding', 'prompt_toolkit.key_binding.vi_state', 'prompt_toolkit.cache', 'prompt_toolkit.filters.types', 'prompt_toolkit.filters.utils', 'prompt_toolkit.clipboard', 'prompt_toolkit.clipboard.base', 'prompt_toolkit.selection', 'prompt_toolkit.clipboard.in_memory', 'prompt_toolkit.completion', 'prompt_toolkit.document', 'prompt_toolkit.history', 'prompt_toolkit.search_state', 'prompt_toolkit.validation', 'prompt_toolkit.buffer_mapping', 'prompt_toolkit.key_binding.bindings', 'prompt_toolkit.key_binding.bindings.basic', 'prompt_toolkit.keys', 'prompt_toolkit.layout', 'prompt_toolkit.layout.containers', 'prompt_toolkit.layout.controls', 'prompt_toolkit.mouse_events', 'prompt_toolkit.token', 'prompt_toolkit.layout.lexers', 'prompt_toolkit.layout.utils', 'prompt_toolkit.layout.processors', 'prompt_toolkit.reactive', 'prompt_toolkit.layout.screen', 'prompt_toolkit.layout.dimension', 'prompt_toolkit.layout.margins', 'prompt_toolkit.renderer', 'prompt_toolkit.layout.mouse_handlers', 'prompt_toolkit.output', 'prompt_toolkit.styles', 'prompt_toolkit.styles.base', 'prompt_toolkit.styles.defaults', 'prompt_toolkit.styles.from_dict', 'prompt_toolkit.styles.utils', 'prompt_toolkit.styles.from_pygments', 'pygments.style', 'pygments.styles.default', 'prompt_toolkit.key_binding.bindings.named_commands', 'prompt_toolkit.key_binding.bindings.completion', 'prompt_toolkit.key_binding.registry', 'prompt_toolkit.key_binding.input_processor', 'prompt_toolkit.key_binding.bindings.emacs', 'prompt_toolkit.key_binding.bindings.scroll', 'prompt_toolkit.key_binding.bindings.vi', 'prompt_toolkit.key_binding.digraphs', 'prompt_toolkit.key_binding.defaults', 'prompt_toolkit.eventloop', 'prompt_toolkit.eventloop.base', 'prompt_toolkit.eventloop.callbacks', 'prompt_toolkit.input', 'prompt_toolkit.terminal', 'prompt_toolkit.terminal.vt100_input', 'prompt_toolkit.shortcuts', 'prompt_toolkit.layout.menus', 'prompt_toolkit.layout.prompt', 'prompt_toolkit.layout.toolbars', 'prompt_toolkit.terminal.vt100_output', 'prompt_toolkit.key_binding.manager', 'IPython.terminal.debugger', 'IPython.core.completer', 'unicodedata', 'IPython.core.latex_symbols', 'IPython.utils.generics', 'simplegeneric', 'IPython.terminal.ptutils', 'IPython.terminal.shortcuts', 'IPython.terminal.magics', 'IPython.lib.clipboard', 'IPython.terminal.pt_inputhooks', 'IPython.terminal.prompts', 'IPython.terminal.ipapp', 'IPython.core.magics', 'IPython.core.magics.auto', 'IPython.core.magics.basic', 'IPython.core.magics.code', 'IPython.core.magics.config', 'IPython.core.magics.display', 'IPython.core.magics.execution', 'timeit', 'cProfile', '_lsprof', 'profile', 'pstats', 'IPython.utils.module_paths', 'imp', 'IPython.utils.timing', 'IPython.core.magics.extension', 'IPython.core.magics.history', 'IPython.core.magics.logging', 'IPython.core.magics.namespace', 'IPython.core.magics.osm', 'IPython.core.magics.pylab', 'IPython.core.pylabtools', 'IPython.core.magics.script', 'IPython.lib.backgroundjobs', 'IPython.core.shellapp', 'IPython.extensions', 'IPython.extensions.storemagic', 'IPython.utils.frame', 'IPython.external', 'IPython.external.decorators', 'numpy', 'numpy._globals', 'numpy.__config__', 'numpy.version', 'numpy._distributor_init', 'numpy.core', 'numpy.core.info', 'numpy.core.multiarray', 'numpy.core.overrides', 'numpy.core._multiarray_umath', 'numpy.compat', 'numpy.compat._inspect', 'numpy.compat.py3k', 'numpy.core.umath', 'numpy.core.numerictypes', 'numbers', 'numpy.core._string_helpers', 'numpy.core._type_aliases', 'numpy.core._dtype', 'numpy.core.numeric', 'numpy.core._internal', 'numpy.core.fromnumeric', 'numpy.core._methods', 'numpy.core.arrayprint', 'numpy.core.defchararray', 'numpy.core.records', 'numpy.core.memmap', 'numpy.core.function_base', 'numpy.core.machar', 'numpy.core.getlimits', 'numpy.core.shape_base', 'numpy.core.einsumfunc', 'numpy.core._add_newdocs', 'numpy.core._multiarray_tests', 'numpy.core._dtype_ctypes', 'numpy._pytesttester', 'numpy.lib', 'numpy.lib.info', 'numpy.lib.type_check', 'numpy.lib.ufunclike', 'numpy.lib.index_tricks', 'numpy.matrixlib', 'numpy.matrixlib.defmatrix', 'numpy.linalg', 'numpy.linalg.info', 'numpy.linalg.linalg', 'numpy.lib.twodim_base', 'numpy.linalg.lapack_lite', 'numpy.linalg._umath_linalg', 'numpy.lib.function_base', 'numpy.lib.utils', 'numpy.lib.histograms', 'numpy.lib.stride_tricks', 'numpy.lib.mixins', 'numpy.lib.nanfunctions', 'numpy.lib.shape_base', 'numpy.lib.scimath', 'numpy.lib.polynomial', 'numpy.lib.arraysetops', 'numpy.lib.npyio', 'numpy.lib.format', 'numpy.lib._datasource', 'numpy.lib._iotools', 'numpy.lib.financial', 'decimal', '_decimal', 'numpy.lib.arrayterator', 'numpy.lib.arraypad', 'numpy.lib._version', 'numpy.fft', 'numpy.fft.info', 'numpy.fft.fftpack', 'numpy.fft.fftpack_lite', 'numpy.fft.helper', 'numpy.polynomial', 'numpy.polynomial.polynomial', 'numpy.polynomial.polyutils', 'numpy.polynomial._polybase', 'numpy.polynomial.chebyshev', 'numpy.polynomial.legendre', 'numpy.polynomial.hermite', 'numpy.polynomial.hermite_e', 'numpy.polynomial.laguerre', 'numpy.random', 'numpy.random.mtrand', 'cython_runtime', 'mtrand', 'numpy.ctypeslib', 'numpy.ma', 'numpy.ma.core', 'numpy.ma.extras', 'numpy.testing', 'numpy.testing._private', 'numpy.testing._private.utils', 'numpy.testing._private.decorators', 'numpy.testing._private.nosetester', 'numpy.testing.decorators', 'doctest', 'IPython.external.decorators._decorators', 'IPython.external.decorators._numpy_testing_utils', 'IPython.kernel', 'IPython.utils.shimmodule', 'IPython.kernel.zmq.session', 'IPython.kernel.zmq', 'IPython.kernel.comm', 'IPython.kernel.inprocess', 'IPython.kernel.ioloop', 'IPython.kernel.blocking', 'ipykernel', 'ipykernel._version', 'ipykernel.connect', 'jupyter_client', 'jupyter_client._version', 'jupyter_client.connect', 'zmq', 'zmq.backend', 'zmq.backend.select', 'zmq.backend.cython', 'zmq.backend.cython.constants', 'zmq.backend.cython.error', '_cython_0_29_2', 'zmq.backend.cython.message', 'zmq.error', 'zmq.backend.cython.context', 'zmq.backend.cython.socket', 'zmq.backend.cython.utils', 'zmq.backend.cython._poll', 'zmq.backend.cython._version', 'zmq.backend.cython._device', 'zmq.sugar', 'zmq.sugar.constants', 'zmq.utils', 'zmq.utils.constant_names', 'zmq.sugar.context', 'zmq.sugar.attrsettr', 'zmq.sugar.socket', 'zmq.sugar.poll', 'zmq.utils.jsonapi', 'zmq.utils.strtypes', 'simplejson', 'simplejson.errors', 'simplejson.raw_json', 'simplejson.decoder', 'simplejson.compat', 'simplejson.scanner', 'simplejson._speedups', 'simplejson.encoder', 'zmq.sugar.frame', 'zmq.sugar.tracker', 'zmq.sugar.version', 'zmq.sugar.stopwatch', 'jupyter_client.localinterfaces', 'jupyter_core', 'jupyter_core.version', 'jupyter_core.paths', 'jupyter_client.launcher', 'traitlets.log', 'jupyter_client.client', 'jupyter_client.channels', 'jupyter_client.channelsabc', 'jupyter_client.clientabc', 'jupyter_client.manager', 'jupyter_client.kernelspec', 'jupyter_client.managerabc', 'jupyter_client.blocking', 'jupyter_client.blocking.client', 'jupyter_client.blocking.channels', 'jupyter_client.multikernelmanager', 'uuid', '_uuid', 'ipykernel.comm', 'ipykernel.comm.manager', 'ipykernel.comm.comm', 'ipykernel.kernelbase', 'jupyter_client.session', 'hmac', 'zmq.eventloop', 'zmq.eventloop.ioloop', 'tornado', 'tornado.log', 'tornado.escape', 'tornado.util', 'tornado.speedups', 'colorama', 'colorama.initialise', 'colorama.ansitowin32', 'colorama.ansi', 'colorama.winterm', 'colorama.win32', 'tornado.ioloop', 'tornado.concurrent', 'tornado.stack_context', 'tornado.platform', 'tornado.platform.auto', 'tornado.platform.posix', 'tornado.platform.common', 'tornado.platform.interface', 'concurrent.futures.thread', 'tornado.platform.asyncio', 'tornado.gen', 'zmq.eventloop.zmqstream', 'jupyter_client.jsonutil', 'dateutil', 'dateutil._version', 'dateutil.parser', 'dateutil.parser._parser', 'dateutil.relativedelta', 'dateutil._common', 'dateutil.tz', 'dateutil.tz.tz', 'dateutil.tz._common', 'dateutil.tz._factories', 'dateutil.parser.isoparser', '_strptime', 'jupyter_client.adapter', 'ipykernel.jsonutil', 'ipykernel.inprocess', 'ipykernel.inprocess.channels', 'ipykernel.inprocess.socket', 'ipykernel.inprocess.client', 'ipykernel.inprocess.manager', 'ipykernel.inprocess.constants', 'ipykernel.inprocess.blocking', 'jupyter_client.ioloop', 'jupyter_client.ioloop.manager', 'jupyter_client.ioloop.restarter', 'jupyter_client.restarter', 'IPython.sphinxext', 'IPython.testing.plugin', 'OpenSSL', 'OpenSSL.crypto', 'cryptography', 'cryptography.__about__', 'cryptography.x509', 'cryptography.x509.certificate_transparency', 'cryptography.x509.base', 'cryptography.utils', 'cryptography.hazmat', 'cryptography.hazmat.primitives', 'cryptography.hazmat.primitives.asymmetric', 'cryptography.hazmat.primitives.asymmetric.dsa', 'cryptography.hazmat.primitives.asymmetric.ec', 'cryptography.hazmat._oid', 'cryptography.hazmat.primitives.asymmetric.rsa', 'cryptography.exceptions', 'cryptography.hazmat.backends', 'cryptography.hazmat.backends.interfaces', 'cryptography.x509.extensions', 'ipaddress', 'asn1crypto', 'asn1crypto.version', 'asn1crypto.keys', 'asn1crypto._elliptic_curve', 'asn1crypto._int', 'asn1crypto.util', 'asn1crypto._errors', 'asn1crypto._iri', 'encodings.idna', 'stringprep', 'asn1crypto._types', 'asn1crypto._ordereddict', 'asn1crypto._ffi', 'asn1crypto._perf', 'asn1crypto._perf._big_num_ctypes', 'ctypes.util', 'asn1crypto.algos', 'asn1crypto.core', 'asn1crypto._teletex_codec', 'asn1crypto.parser', 'cryptography.hazmat.primitives.constant_time', 'cryptography.hazmat.bindings', '_cffi_backend', '_constant_time.lib', '_constant_time', 'cryptography.hazmat.bindings._constant_time', 'cryptography.hazmat.primitives.serialization', 'cryptography.hazmat.primitives.serialization.base', 'cryptography.hazmat.primitives.serialization.ssh', 'cryptography.hazmat.primitives.asymmetric.ed25519', 'cryptography.x509.general_name', 'cryptography.x509.name', 'cryptography.x509.oid', 'cryptography.hazmat.primitives.hashes', 'OpenSSL._util', 'cryptography.hazmat.bindings.openssl', 'cryptography.hazmat.bindings.openssl.binding', '_openssl.lib', '_openssl', 'cryptography.hazmat.bindings._openssl', 'cryptography.hazmat.bindings.openssl._conditional', 'OpenSSL.SSL', 'OpenSSL.version', 'PIL', 'PIL._version', 'PyQt5', 'PyQt5.uic', 'PyQt5.uic.Compiler', 'PyQt5.uic.Compiler.indenter', 'PyQt5.uic.Compiler.compiler', 'PyQt5.uic.properties', 'PyQt5.uic.exceptions', 'PyQt5.uic.icon_cache', 'PyQt5.uic.port_v3', 'PyQt5.uic.port_v3.ascii_upper', 'PyQt5.uic.uiparser', 'PyQt5.uic.objcreator', 'PyQt5.uic.Compiler.qtproxies', 'PyQt5.uic.Compiler.misc', 'PyQt5.uic.port_v3.proxy_base', 'PyQt5.uic.Compiler.proxy_metaclass', 'PyQt5.uic.port_v3.as_string', 'PyQt5.uic.Compiler.qobjectcreator', 'PyQt5.uic.Loader', 'RPi', 'RPi.GPIO', 'RPi._GPIO', 'apt', 'apt_pkg', 'apt.package', 'apt.progress', 'apt.progress.text', 'apt.progress.base', 'apt.cache', 'apt.cdrom', 'aptsources', 'astroid', 'wrapt', 'wrapt.wrappers', 'wrapt._wrappers', 'wrapt.decorators', 'wrapt.importer', 'astroid.__pkginfo__', 'astroid.exceptions', 'astroid.util', 'lazy_object_proxy', 'lazy_object_proxy.utils', 'lazy_object_proxy.cext', 'astroid.nodes', 'astroid.node_classes', 'astroid.as_string', 'astroid.bases', 'astroid.context', 'astroid.manager', 'astroid.interpreter', 'astroid.interpreter._import', 'astroid.interpreter._import.spec', 'astroid.interpreter._import.util', 'pkg_resources', 'zipfile', 'plistlib', 'xml.parsers.expat', 'xml.parsers.expat.model', 'xml.parsers.expat.errors', 'pkg_resources.extern', 'pkg_resources._vendor', 'pkg_resources.extern.six', 'pkg_resources._vendor.six', 'pkg_resources.extern.six.moves', 'pkg_resources._vendor.six.moves', 'pkg_resources.py31compat', 'pkg_resources.extern.appdirs', 'pkg_resources._vendor.packaging.__about__', 'pkg_resources.extern.packaging', 'pkg_resources.extern.packaging.version', 'pkg_resources.extern.packaging._structures', 'pkg_resources.extern.packaging.specifiers', 'pkg_resources.extern.packaging._compat', 'pkg_resources.extern.packaging.requirements', 'pkg_resources.extern.pyparsing', 'pkg_resources.extern.six.moves.urllib', 'pkg_resources.extern.packaging.markers', 'astroid.modutils', 'distutils.sysconfig', 'distutils.errors', 'astroid.transforms', 'astroid.decorators', 'astroid.mixins', 'astroid.scoped_nodes', 'astroid.interpreter.objectmodel', 'astroid.interpreter.dunder_lookup', 'astroid.inference', 'astroid.helpers', 'astroid.raw_building', 'astroid.protocols', 'astroid.arguments', 'astroid.builder', 'astroid._ast', 'typed_ast', 'typed_ast.ast3', 'typed_ast._ast3', 'typed_ast.ast27', 'typed_ast._ast27', 'astroid.rebuilder', 'brain_builtin_inference', 'astroid.objects', 'brain_hashlib', 'brain_curses', 'brain_attrs', 'brain_gi', 'brain_subprocess', 'brain_io', 'brain_six', 'brain_qt', 'brain_threading', 'brain_random', 'brain_nose', 'brain_multiprocessing', 'brain_pytest', 'brain_dateutil', 'brain_namedtuple_enum', 'brain_fstrings', 'brain_numpy', 'brain_uuid', 'brain_argparse', 'brain_mechanize', 'brain_re', 'brain_pkg_resources', 'brain_collections', 'brain_functools', 'brain_ssl', 'brain_typing', 'asttokens', 'asttokens.line_numbers', 'asttokens.asttokens', 'asttokens.util', 'asttokens.mark_tokens', 'automationhat', 'automationhat.ads1015', 'automationhat.pins', 'blinker', 'blinker.base', 'blinker._utilities', 'blinker._saferef', 'bs4', 'bs4.builder', 'bs4.element', 'soupsieve', 'soupsieve.__meta__', 'soupsieve.css_parser', 'soupsieve.util', 'soupsieve.css_match', 'soupsieve.css_types', 'bs4.dammit', 'chardet', 'chardet.compat', 'chardet.universaldetector', 'chardet.charsetgroupprober', 'chardet.enums', 'chardet.charsetprober', 'chardet.escprober', 'chardet.codingstatemachine', 'chardet.escsm', 'chardet.latin1prober', 'chardet.mbcsgroupprober', 'chardet.utf8prober', 'chardet.mbcssm', 'chardet.sjisprober', 'chardet.mbcharsetprober', 'chardet.chardistribution', 'chardet.euctwfreq', 'chardet.euckrfreq', 'chardet.gb2312freq', 'chardet.big5freq', 'chardet.jisfreq', 'chardet.jpcntx', 'chardet.eucjpprober', 'chardet.gb2312prober', 'chardet.euckrprober', 'chardet.cp949prober', 'chardet.big5prober', 'chardet.euctwprober', 'chardet.sbcsgroupprober', 'chardet.sbcharsetprober', 'chardet.langcyrillicmodel', 'chardet.langgreekmodel', 'chardet.langbulgarianmodel', 'chardet.langthaimodel', 'chardet.langhebrewmodel', 'chardet.hebrewprober', 'chardet.langturkishmodel', 'chardet.version', 'bs4.builder._htmlparser', 'html.parser', '_markupbase', 'bs4.builder._html5lib', 'html5lib', 'html5lib.html5parser', 'html5lib._inputstream', 'six.moves.urllib', 'webencodings', 'webencodings.labels', 'encodings.utf_16_le', 'encodings.utf_16_be', 'html5lib.constants', 'html5lib._utils', 'xml.etree.cElementTree', 'html5lib._tokenizer', 'html5lib._trie', 'html5lib._trie.py', 'html5lib._trie._base', 'html5lib.treebuilders', 'html5lib.treebuilders.base', 'html5lib.treewalkers', 'html5lib.serializer', 'xml.sax.saxutils', 'bs4.builder._lxml', 'lxml', 'lxml.etree', '_cython_0_29_6', 'lxml._elementpath', 'bs4.tests', 'buttonshim', 'smbus', 'colorsys', 'cairo', 'cairo._cairo', 'certifi', 'certifi.core', 'chardet.cli', 'click', 'click.core', 'click.types', 'click._compat', 'click.exceptions', 'click.utils', 'click.globals', 'click.termui', 'click.formatting', 'click.parser', 'click._unicodefun', 'click.decorators', 'colorzero', 'colorzero.color', 'colorzero.conversions', 'fractions', 'colorzero.tables', 'colorzero.types', 'colorzero.attr', 'colorzero.deltae', 'colorzero.easings', 'cryptography.hazmat.backends.openssl', 'cryptography.hazmat.backends.openssl.backend', 'cryptography.hazmat.backends.openssl.aead', 'cryptography.hazmat.backends.openssl.ciphers', 'cryptography.hazmat.primitives.ciphers', 'cryptography.hazmat.primitives.ciphers.base', 'cryptography.hazmat.primitives.ciphers.modes', 'cryptography.hazmat.backends.openssl.cmac', 'cryptography.hazmat.primitives.mac', 'cryptography.hazmat.backends.openssl.decode_asn1', 'cryptography.hazmat.backends.openssl.dh', 'cryptography.hazmat.primitives.asymmetric.dh', 'cryptography.hazmat.backends.openssl.dsa', 'cryptography.hazmat.backends.openssl.utils', 'cryptography.hazmat.primitives.asymmetric.utils', 'cryptography.hazmat.backends.openssl.ec', 'cryptography.hazmat.backends.openssl.ed25519', 'cryptography.hazmat.backends.openssl.ed448', 'cryptography.hazmat.primitives.asymmetric.ed448', 'cryptography.hazmat.backends.openssl.encode_asn1', 'cryptography.hazmat.backends.openssl.hashes', 'cryptography.hazmat.backends.openssl.hmac', 'cryptography.hazmat.backends.openssl.ocsp', 'cryptography.hazmat.backends.openssl.x509', 'cryptography.x509.ocsp', 'cryptography.hazmat.backends.openssl.rsa', 'cryptography.hazmat.primitives.asymmetric.padding', 'cryptography.hazmat.backends.openssl.x25519', 'cryptography.hazmat.primitives.asymmetric.x25519', 'cryptography.hazmat.backends.openssl.x448', 'cryptography.hazmat.primitives.asymmetric.x448', 'cryptography.hazmat.primitives.ciphers.algorithms', 'cryptography.hazmat.primitives.kdf', 'cryptography.hazmat.primitives.kdf.scrypt', 'cryptography.hazmat.primitives.twofactor', 'cupshelpers', 'cupshelpers.cupshelpers', 'cups', 'cupshelpers.config', 'cupshelpers.ppds', 'cupshelpers.xmldriverprefs', 'cupshelpers.openprinting', 'requests', 'urllib3', 'urllib3.connectionpool', 'urllib3.exceptions', 'six.moves.http_client', 'urllib3.packages', 'urllib3.packages.ssl_match_hostname', 'urllib3.connection', 'urllib3.util', 'urllib3.util.connection', 'urllib3.util.wait', 'urllib3.contrib', 'urllib3.contrib._appengine_environ', 'urllib3.util.request', 'urllib3.util.response', 'urllib3.util.ssl_', 'urllib3.util.timeout', 'urllib3.util.retry', 'urllib3.util.url', 'urllib3._collections', 'urllib3.request', 'urllib3.filepost', 'urllib3.fields', 'six.moves.urllib.parse', 'urllib3.response', 'urllib3.util.queue', 'urllib3.poolmanager', 'requests.exceptions', 'urllib3.contrib.pyopenssl', 'urllib3.packages.backports', 'urllib3.packages.backports.makefile', 'requests.__version__', 'requests.utils', 'requests.certs', 'requests._internal_utils', 'requests.compat', 'http.cookiejar', 'http.cookies', 'requests.cookies', 'requests.structures', 'requests.packages', 'requests.packages.urllib3', 'requests.packages.urllib3.connectionpool', 'requests.packages.urllib3.exceptions', 'requests.packages.urllib3.packages', 'requests.packages.urllib3.packages.ssl_match_hostname', 'requests.packages.urllib3.connection', 'requests.packages.urllib3.util', 'requests.packages.urllib3.util.connection', 'requests.packages.urllib3.util.wait', 'requests.packages.urllib3.contrib', 'requests.packages.urllib3.contrib._appengine_environ', 'requests.packages.urllib3.util.request', 'requests.packages.urllib3.util.response', 'requests.packages.urllib3.util.ssl_', 'requests.packages.urllib3.util.timeout', 'requests.packages.urllib3.util.retry', 'requests.packages.urllib3.util.url', 'requests.packages.urllib3._collections', 'requests.packages.urllib3.request', 'requests.packages.urllib3.filepost', 'requests.packages.urllib3.fields', 'requests.packages.urllib3.response', 'requests.packages.urllib3.util.queue', 'requests.packages.urllib3.poolmanager', 'requests.packages.urllib3.contrib.pyopenssl', 'requests.packages.urllib3.packages.backports', 'requests.packages.urllib3.packages.backports.makefile', 'idna', 'idna.package_data', 'idna.core', 'idna.idnadata', 'idna.intranges', 'requests.packages.idna', 'requests.packages.idna.package_data', 'requests.packages.idna.core', 'requests.packages.idna.idnadata', 'requests.packages.idna.intranges', 'requests.packages.chardet', 'requests.packages.chardet.compat', 'requests.packages.chardet.universaldetector', 'requests.packages.chardet.charsetgroupprober', 'requests.packages.chardet.enums', 'requests.packages.chardet.charsetprober', 'requests.packages.chardet.escprober', 'requests.packages.chardet.codingstatemachine', 'requests.packages.chardet.escsm', 'requests.packages.chardet.latin1prober', 'requests.packages.chardet.mbcsgroupprober', 'requests.packages.chardet.utf8prober', 'requests.packages.chardet.mbcssm', 'requests.packages.chardet.sjisprober', 'requests.packages.chardet.mbcharsetprober', 'requests.packages.chardet.chardistribution', 'requests.packages.chardet.euctwfreq', 'requests.packages.chardet.euckrfreq', 'requests.packages.chardet.gb2312freq', 'requests.packages.chardet.big5freq', 'requests.packages.chardet.jisfreq', 'requests.packages.chardet.jpcntx', 'requests.packages.chardet.eucjpprober', 'requests.packages.chardet.gb2312prober', 'requests.packages.chardet.euckrprober', 'requests.packages.chardet.cp949prober', 'requests.packages.chardet.big5prober', 'requests.packages.chardet.euctwprober', 'requests.packages.chardet.sbcsgroupprober', 'requests.packages.chardet.sbcharsetprober', 'requests.packages.chardet.langcyrillicmodel', 'requests.packages.chardet.langgreekmodel', 'requests.packages.chardet.langbulgarianmodel', 'requests.packages.chardet.langthaimodel', 'requests.packages.chardet.langhebrewmodel', 'requests.packages.chardet.hebrewprober', 'requests.packages.chardet.langturkishmodel', 'requests.packages.chardet.version', 'requests.packages.chardet.cli', 'requests.models', 'requests.hooks', 'requests.auth', 'requests.status_codes', 'requests.api', 'requests.sessions', 'requests.adapters', 'dateutil.zoneinfo', 'tarfile', 'dbus', 'dbus._compat', 'dbus.exceptions', 'dbus.types', '_dbus_bindings', 'dbus._dbus', 'dbus.bus', 'dbus.connection', 'dbus.lowlevel', 'dbus.proxies', 'dbus._expat_introspect_parser', 'dbus.mainloop', 'docutils', 'docutils.languages', 'docutils.utils', 'docutils.nodes', 'docutils.io', 'docutils._compat', 'docutils.utils.error_reporting', 'docutils.parsers', 'docutils.parsers.rst', 'docutils.statemachine', 'docutils.parsers.rst.states', 'docutils.parsers.rst.directives', 'docutils.parsers.rst.languages', 'docutils.parsers.rst.languages.en', 'docutils.parsers.rst.tableparser', 'docutils.parsers.rst.roles', 'docutils.utils.code_analyzer', 'docutils.utils.punctuation_chars', 'docutils.utils.urischemes', 'roman', 'docutils.frontend', 'configparser', 'optparse', 'docutils.transforms', 'docutils.transforms.universal', 'docutils.utils.smartquotes', 'docutils.readers', 'docutils.utils.math', 'docutils.writers', 'docutils.writers.html4css1', 'docutils.transforms.writer_aux', 'docutils.writers._html_base', 'PIL.Image', 'PIL._util', 'PIL.ImageMode', 'PIL._binary', 'PIL._imaging', 'docutils.utils.math.unichar2tex', 'docutils.utils.math.math2html', 'docutils.utils.math.latex2mathml', 'docutils.utils.math.tex2unichar', 'docutils.utils.math.tex2mathml_extern', 'docutils.writers.html5_polyglot', 'docutils.writers.latex2e', 'docutils.writers.odf_odt', 'xml.dom.minidom', 'xml.dom.minicompat', 'xml.dom.xmlbuilder', 'xml.dom.NodeFilter', 'docutils.readers.standalone', 'docutils.transforms.frontmatter', 'docutils.transforms.references', 'docutils.transforms.misc', 'docutils.writers.odf_odt.pygmentsformatter', 'docutils.writers.pep_html', 'docutils.writers.s5_html', 'docutils.writers.xetex', 'cap1xxx', 'flask', 'werkzeug', 'werkzeug._compat', 'werkzeug.exceptions', 'werkzeug._internal', 'werkzeug.wrappers', 'werkzeug.http', 'werkzeug.datastructures', 'werkzeug.filesystem', 'werkzeug.urls', 'werkzeug.formparser', 'werkzeug.wsgi', 'werkzeug.utils', 'jinja2', 'jinja2.environment', 'jinja2.nodes', 'jinja2.utils', 'jinja2._compat', 'markupsafe', 'markupsafe._compat', 'markupsafe._speedups', 'jinja2.defaults', 'jinja2.filters', 'jinja2.runtime', 'jinja2.exceptions', 'jinja2.tests', 'jinja2.lexer', 'jinja2.parser', 'jinja2.compiler', 'jinja2.visitor', 'jinja2.optimizer', 'jinja2.idtracking', 'jinja2.loaders', 'jinja2.bccache', 'jinja2.asyncsupport', 'jinja2.asyncfilters', 'flask.app', 'werkzeug.routing', 'flask.cli', 'flask._compat', 'flask.globals', 'werkzeug.local', 'flask.helpers', 'flask.signals', 'flask.json', 'itsdangerous', 'flask.config', 'flask.ctx', 'flask.logging', 'flask.sessions', 'flask.json.tag', 'flask.templating', 'flask.wrappers', 'flask.blueprints', 'gi', 'gi._error', 'gi._gi', 'gi._compat', 'gi._gobject', 'gi._gi_cairo', 'glib', 'gobject', 'gio', 'gtk', 'gtk.gdk', 'gi.overrides', 'gi._constants', 'gi.repository', 'gi.importer', 'gi.module', 'gi.types', 'gi.docstring', 'gi._propertyhelper', 'gi._signalhelper', 'gpiozero', 'gpiozero.pins', 'gpiozero.devices', 'gpiozero.threads', 'gpiozero.exc', 'gpiozero.mixins', 'statistics', 'gpiozero.compat', 'cmath', 'gpiozero.pins.data', 'gpiozero.input_devices', 'gpiozero.pins.pigpio', 'pigpio', 'gpiozero.pins.pi', 'spidev', 'gpiozero.spi_devices', 'gpiozero.output_devices', 'gpiozero.tones', 'gpiozero.boards', 'gpiozero.fonts', 'gpiozero.internal_devices', 'gpiozerocli', 'guizero', 'guizero.utilities', 'PIL.ImageTk', 'guizero.alerts', 'guizero.App', 'guizero.base', 'guizero.tkmixins', 'guizero.event', 'guizero.Box', 'guizero.ButtonGroup', 'guizero.RadioButton', 'guizero.CheckBox', 'guizero.Combo', 'guizero.ListBox', 'guizero.MenuBar', 'guizero.Window', 'guizero.Picture', 'guizero.PushButton', 'guizero.Slider', 'guizero.Text', 'guizero.TextBox', 'tkinter.scrolledtext', 'guizero.Waffle', 'html5lib.filters', 'html5lib.treeadapters', 'html5lib.treeadapters.sax', 'ipykernel.gui', 'ipykernel.inprocess.tests', 'ipykernel.pylab', 'ipykernel.tests', 'unittest.mock', 'ipykernel.kernelspec', 'ipython_genutils.testing', 'ipython_genutils.tests', 'isort', 'isort.settings', 'isort.pie_slice', 'isort.isort', 'isort.natural', 'jedi', 'jedi.api', 'parso', 'parso.parser', 'parso.tree', 'parso._compatibility', 'parso.pgen2', 'parso.pgen2.generator', 'parso.pgen2.grammar_parser', 'parso.python', 'parso.python.tokenize', 'parso.python.token', 'parso.utils', 'parso.grammar', 'parso.python.diff', 'parso.python.parser', 'parso.python.tree', 'parso.python.prefix', 'parso.cache', 'parso.python.errors', 'parso.normalizer', 'parso.python.pep8', 'jedi._compatibility', 'jedi.parser_utils', 'jedi.debug', 'jedi.settings', 'jedi.cache', 'jedi.api.classes', 'jedi.evaluate', 'jedi.evaluate.utils', 'jedi.evaluate.imports', 'jedi.evaluate.sys_path', 'jedi.evaluate.cache', 'jedi.evaluate.base_context', 'jedi.common', 'jedi.common.context', 'jedi.evaluate.helpers', 'jedi.common.utils', 'jedi.evaluate.compiled', 'jedi.evaluate.compiled.context', 'jedi.evaluate.filters', 'jedi.evaluate.flow_analysis', 'jedi.evaluate.recursion', 'jedi.evaluate.lazy_context', 'jedi.evaluate.compiled.access', 'jedi.evaluate.compiled.getattr_static', 'jedi.evaluate.compiled.fake', 'jedi.evaluate.analysis', 'jedi.evaluate.context', 'jedi.evaluate.context.module', 'jedi.evaluate.context.klass', 'jedi.evaluate.context.function', 'jedi.evaluate.docstrings', 'jedi.evaluate.pep0484', 'jedi.evaluate.arguments', 'jedi.evaluate.context.iterable', 'jedi.evaluate.param', 'jedi.evaluate.context.asynchronous', 'jedi.evaluate.parser_cache', 'jedi.evaluate.context.instance', 'jedi.evaluate.syntax_tree', 'jedi.evaluate.finder', 'jedi.api.keywords', 'pydoc_data.topics', 'jedi.api.interpreter', 'jedi.evaluate.compiled.mixed', 'jedi.api.helpers', 'jedi.api.completion', 'jedi.api.environment', 'filecmp', 'jedi.evaluate.compiled.subprocess', 'jedi.evaluate.compiled.subprocess.functions', 'jedi.api.exceptions', 'jedi.api.project', 'jedi.evaluate.usages', 'jupyter_client.tests', 'jupyter_core.tests', 'jupyter_core.utils', 'jwt', 'jwt.api_jwt', 'jwt.api_jws', 'jwt.algorithms', 'jwt.compat', 'jwt.exceptions', 'jwt.utils', 'jwt.contrib', 'jwt.contrib.algorithms', 'keyring', 'keyring.core', 'keyring.py27compat', 'keyring.py33compat', 'keyring.backend', 'entrypoints', 'keyring.credentials', 'keyring.errors', 'keyring.util', 'keyring.util.properties', 'keyring.py32compat', 'keyring.util.platform_', 'keyring.backends', 'keyring.backends.fail', 'keyring.backends.kwallet', 'dbus.mainloop.glib', '_dbus_glib_bindings', 'keyring.backends.SecretService', 'secretstorage', 'secretstorage.collection', 'secretstorage.defines', 'secretstorage.exceptions', 'secretstorage.item', 'secretstorage.util', 'secretstorage.dhcrypto', 'keyring.backends.Windows', 'keyring.backends.chainer', 'keyring.backends.OS_X', 'keyrings', 'keyrings.alt', 'keyrings.alt.Gnome', 'keyrings.alt.Google', 'keyrings.alt.keyczar', 'keyrings.alt.Windows', 'keyrings.alt.file_base', 'keyrings.alt.escape', 'keyrings.alt.file', 'keyrings.alt.multi', 'keyrings.alt.pyfs', 'Crypto.Protocol.KDF', 'Crypto.Hash.SHA', 'Crypto.Hash.HMAC', 'Crypto.Util.strxor', 'keyring.tests', 'keyring.tests.backends', 'lxml.html', 'lxml.html.defs', 'lxml.html._setmixin', 'lxml.includes', 'lxml.isoschematron', 'matplotlib', 'distutils.version', 'matplotlib.cbook', 'matplotlib.cbook.deprecation', 'matplotlib.rcsetup', 'matplotlib.fontconfig_pattern', 'pyparsing', 'matplotlib.colors', 'matplotlib._color_data', 'cycler', 'matplotlib._version']



in FHEM

DEBUG:matplotlib:loaded modules: ['sys', 'builtins', '_frozen_importlib', '_imp', '_thread', '_warnings', '_weakref', 'zipimport', '_frozen_importlib_external', '_io', 'marshal', 'posix', 'encodings', 'codecs', '_codecs', 'encodings.aliases', 'encodings.utf_8', '_signal', '__main__', 'encodings.latin_1', 'io', 'abc', '_abc', '_bootlocale', '_locale', 'site', 'os', 'stat', '_stat', 'posixpath', 'genericpath', 'os.path', '_collections_abc', '_sitebuiltins', 'types', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap_external', 'warnings', 'importlib.util', 'importlib.abc', 'importlib.machinery', 'contextlib', 'collections', 'operator', '_operator', 'keyword', 'heapq', '_heapq', 'itertools', 'reprlib', '_collections', 'functools', '_functools', 'logilab', 'mpl_toolkits', 'sitecustomize', 'pyaudio', '_portaudio', 'wave', 'audioop', 'struct', '_struct', 'chunk', 'datetime', 'time', 'math', '_datetime', 'pydoc', 'inspect', 'dis', 'opcode', '_opcode', 'collections.abc', 'enum', 'linecache', 'tokenize', 're', 'sre_compile', '_sre', 'sre_parse', 'sre_constants', 'copyreg', 'token', 'pkgutil', 'weakref', '_weakrefset', 'platform', 'subprocess', 'signal', 'errno', '_posixsubprocess', 'select', 'selectors', 'threading', 'traceback', 'urllib', 'urllib.parse', 'asyncio', 'asyncio.base_events', 'concurrent', 'concurrent.futures', 'concurrent.futures._base', 'logging', 'string', '_string', 'atexit', 'socket', '_socket', 'ssl', '_ssl', 'base64', 'binascii', 'asyncio.constants', 'asyncio.coroutines', 'asyncio.base_futures', 'asyncio.format_helpers', 'asyncio.log', 'asyncio.events', 'contextvars', '_contextvars', 'asyncio.base_tasks', '_asyncio', 'asyncio.futures', 'asyncio.protocols', 'asyncio.sslproto', 'asyncio.transports', 'asyncio.tasks', 'asyncio.locks', 'asyncio.runners', 'asyncio.queues', 'asyncio.streams', 'asyncio.subprocess', 'asyncio.unix_events', 'asyncio.base_subprocess', 'asyncio.selector_events', 'ctypes', '_ctypes', 'ctypes._endian', 'curses', '_curses', 'dbm', 'dbm.ndbm', '_dbm', 'distutils', 'distutils.command', 'email', 'email.mime', 'ensurepip', 'glob', 'fnmatch', 'tempfile', 'shutil', 'zlib', 'bz2', '_compression', '_bz2', 'lzma', '_lzma', 'pwd', 'grp', 'random', 'hashlib', '_hashlib', '_blake2', '_sha3', 'bisect', '_bisect', '_random', 'html', 'html.entities', 'http', 'json', 'json.decoder', 'json.scanner', '_json', 'json.encoder', 'lib2to3', 'lib2to3.fixes', 'lib2to3.pgen2', 'multiprocessing', 'multiprocessing.context', 'multiprocessing.process', 'multiprocessing.reduction', 'pickle', '_compat_pickle', '_pickle', 'array', '__mp_main__', 'multiprocessing.dummy', 'multiprocessing.dummy.connection', 'queue', '_queue', 'pydoc_data', 'sqlite3', 'sqlite3.dbapi2', '_sqlite3', 'test', 'test.libregrtest', 'test.libregrtest.cmdline', 'argparse', 'gettext', 'locale', 'test.support', 'faulthandler', 'gc', 'logging.handlers', 'nntplib', 'email.header', 'email.quoprimime', 'email.base64mime', 'email.errors', 'email.charset', 'email.encoders', 'quopri', 'sysconfig', 'unittest', 'unittest.result', 'unittest.util', 'unittest.case', 'difflib', 'pprint', 'unittest.suite', 'unittest.loader', 'unittest.main', 'unittest.runner', 'unittest.signals', 'urllib.error', 'urllib.response', 'test.support.testresult', 'xml', 'xml.etree', 'xml.etree.ElementTree', 'xml.etree.ElementPath', 'copy', 'pyexpat.errors', 'pyexpat.model', 'pyexpat', '_elementtree', 'gzip', 'resource', '_sysconfigdata_m_linux_arm-linux-gnueabihf', 'test.libregrtest.main', 'test.libregrtest.runtest', 'test.libregrtest.refleak', 'test.libregrtest.save_env', '_multiprocessing', 'test.libregrtest.setup', 'test.libregrtest.utils', 'textwrap', 'tkinter', '_tkinter', 'tkinter.constants', 'venv', 'wsgiref', 'xml.dom', 'xml.dom.domreg', 'xml.parsers', 'xml.sax', 'xml.sax.xmlreader', 'xml.sax.handler', 'xml.sax._exceptions', 'xmlrpc', 'Crypto', 'Crypto.Cipher', 'Crypto.Hash', 'Crypto.Protocol', 'Crypto.PublicKey', 'Crypto.Random', 'Crypto.Random.OSRNG', 'Crypto.Random.OSRNG.posix', 'Crypto.Random.OSRNG.rng_base', 'Crypto.Util', 'Crypto.Util.py3compat', 'Crypto.Random._UserFriendlyRNG', 'Crypto.Random.Fortuna', 'Crypto.Random.Fortuna.FortunaAccumulator', 'Crypto.pct_warnings', 'Crypto.Random.Fortuna.SHAd256', 'Crypto.Hash.SHA256', 'Crypto.Hash.hashalgo', 'Crypto.Random.Fortuna.FortunaGenerator', 'Crypto.Util.number', 'Crypto.PublicKey._fastmath', 'Crypto.Util._number_new', 'Crypto.Util.Counter', 'Crypto.Util._counter', 'Crypto.Cipher.AES', 'Crypto.Cipher.blockalgo', 'Crypto.Cipher._AES', 'Crypto.SelfTest', 'Crypto.SelfTest.Cipher', 'Crypto.SelfTest.Hash', 'Crypto.SelfTest.Protocol', 'Crypto.SelfTest.PublicKey', 'Crypto.SelfTest.Random', 'Crypto.SelfTest.Random.Fortuna', 'Crypto.SelfTest.Random.OSRNG', 'Crypto.SelfTest.Signature', 'Crypto.SelfTest.Util', 'Crypto.Signature', 'IPython', '__future__', 'IPython.core', 'IPython.core.getipython', 'IPython.core.release', 'IPython.core.application', 'traitlets', 'traitlets.traitlets', 'six', 'traitlets.utils', 'traitlets.utils.getargspec', 'traitlets.utils.importstring', 'ipython_genutils', 'ipython_genutils._version', 'ipython_genutils.py3compat', 'ipython_genutils.encoding', 'traitlets.utils.sentinel', 'traitlets.utils.bunch', 'traitlets._version', 'traitlets.config', 'traitlets.config.application', 'decorator', 'traitlets.config.configurable', 'traitlets.config.loader', 'ast', '_ast', 'ipython_genutils.path', 'ipython_genutils.text', 'ipython_genutils.importstring', 'IPython.core.crashhandler', 'IPython.core.ultratb', 'IPython.core.debugger', 'bdb', 'IPython.utils', 'IPython.utils.PyColorize', 'IPython.utils.coloransi', 'IPython.utils.ipstruct', 'IPython.utils.py3compat', 'IPython.utils.encoding', 'IPython.utils.colorable', 'pygments', 'pygments.util', 'IPython.utils.ulinecache', 'IPython.utils.openpy', 'IPython.core.excolors', 'IPython.testing', 'IPython.testing.skipdoctest', 'pdb', 'cmd', 'code', 'codeop', 'IPython.core.display_trap', 'IPython.utils.path', 'IPython.utils.process', 'IPython.utils._process_posix', 'pexpect', 'pexpect.exceptions', 'pexpect.utils', 'pexpect.expect', 'pexpect.pty_spawn', 'pty', 'tty', 'termios', 'ptyprocess', 'ptyprocess.ptyprocess', 'fcntl', 'ptyprocess.util', 'pexpect.spawnbase', 'pexpect.run', 'IPython.utils._process_common', 'shlex', 'IPython.utils.decorators', 'IPython.utils.data', 'IPython.utils.terminal', ...

Otto123

naja python und python3 sind doch getrennte Welten? Ich kenne mich damit nicht gut aus ...
In der FHEM Kommandozeile?
{qx(which python3)}
Im Terminal?
which python3

Ich rufe immer mit kompletten Pfad auf! Der user fhem hat uU keine komplette "Umgebung"
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz