summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelix Richter <Felix.Richter@thalesgroup.com>2019-03-05 08:45:34 +0100
committerFelix Richter <Felix.Richter@thalesgroup.com>2019-03-05 08:45:34 +0100
commitce239876820699f02054e71b4fd0950509833379 (patch)
treecac72fd45f85ad6a057515fb086c0f9a73bbfe59
parent04e1c8c38ffe53175ae719121ad88534a8a662db (diff)
ampel: support tasmota firmwareHEADmaster
-rwxr-xr-xampel/ampel.py63
-rw-r--r--setup.py2
2 files changed, 36 insertions, 29 deletions
diff --git a/ampel/ampel.py b/ampel/ampel.py
index f67ffc9..5665f14 100755
--- a/ampel/ampel.py
+++ b/ampel/ampel.py
@@ -1,13 +1,14 @@
#! /usr/bin/env python3
#! nix-shell -i python3 -p python3 python35Packages.docopt python35Packages.paho-mqtt
-""" usage: ampel [options] NUMLEDS
+""" usage: ampel [options]
+ --topic=TOPIC topic to publish to [Default: /bam/buslicht/cmnd]
--mqtt-server=HOST path to mqtt server [Default: 192.168.8.11]
--influx-server=HOST path to influxdb server [Default: 192.168.8.11]
--no-mqtt disable mqtt connections for debugging
--no-influx disable sending stats to influxdb
-NUMLEDS is the number of leds to output data for (--add-empty does not count in here)
+Ampel only works with sonoff tasmota custom firmware
13 22 24 26 28
|-----------|----|----|----|
@@ -39,8 +40,18 @@ yellow = timedelta(minutes=4)
green = timedelta(minutes=6)
maxtime = timedelta(minutes=15)
+mapped = {
+ "red" : "#FF000",
+ "orange" : "#FF8800",
+ "yellow" : "#FFFF00",
+ "green" : "#00FF00",
+ "blue" : "#0000FF",
+ "too_far" : 2 # cycle
+ }
+
def fetch_data():
+ log.info("fetching data")
efa = VVS_EFA.EFA()
now = dt.now()
conns = efa.get_next_connections(
@@ -56,11 +67,11 @@ def fetch_data():
def main():
args = docopt(__doc__)
db = "telegraf"
- numleds = int(args['NUMLEDS'])
mqtt_server = args["--mqtt-server"]
influx_server = args["--influx-server"]
no_mqtt = args["--no-mqtt"]
no_influx = args["--no-influx"]
+ topic = args["--topic"]
t = fetch_data()
if not no_mqtt:
@@ -68,7 +79,7 @@ def main():
mq = mqtt.Client()
mq.connect(mqtt_server,1883,60)
mq.loop_start()
- pub = lambda topic,data: mq.publish(topic,data)
+ pub = lambda topic,data: mq.publish(topic,data,qos=1,retain=True)
else:
pub = lambda topic,data: log.info("topic: {}\ndata: {}".format(topic,data))
if not no_influx:
@@ -108,33 +119,29 @@ def main():
sendstat(delta.seconds + delta.days*86400)
deltastr = str(delta).split('.', 2)[0]
+ log.info("{}:{:02d} -> {}:{:02d} delta: {}".format(
+ now.hour,now.minute,t.hour,t.minute,deltastr))
if not ( (t - maxtime) < now < t):
- log.info("Bus too far away - {}".format(deltastr))
- ret = calc_chain(3,val)
- ret.insert(0,[0,0,0])
- pub("/leds/nodemcu-switcher/set",json.dumps(ret))
- val += step % 1
+ log.info(f"Bus too far away - {deltastr}")
+ state = "too_far"
+ ret = ""
+ elif (t-red) < now < t:
+ state = "red"
+ elif (t-orange) < now < t:
+ state = "orange"
+ elif (t-yellow) < now < t:
+ state = "yellow"
+ elif (t-green) < now < t:
+ state = "green"
else:
- log.info("{}:{:02d} -> {}:{:02d} delta: {}".format(
- now.hour,now.minute,t.hour,t.minute,deltastr))
- if (t-red) < now < t:
- state = "red"
- ret = [[255,0,0]] * 4
- elif (t-orange) < now < t:
- state = "orange"
- ret = [[255,128,0]] * 4
- elif (t-yellow) < now < t:
- state = "yellow"
- ret = [[255,255,0]] * 4
- elif (t-green) < now < t:
- state = "green"
- ret = [[0,255,0]] * 4
+ state = "blue"
+ log.info(f"State: {state}, old state: {oldstate}")
+ if oldstate != state:
+ oldstate = state
+ if state == "too_far":
+ pub(f"{topic}/Scheme",mapped[state])
else:
- state = "blue"
- ret = [[0,0,255]] * 4
- if oldstate != state:
- oldstate = state
- pub("/leds/nodemcu-switcher/set",json.dumps(ret))
+ pub(f"{topic}/Color",mapped[state])
sleep(1)
if __name__ == "__main__":
diff --git a/setup.py b/setup.py
index 7d948a6..b91f853 100644
--- a/setup.py
+++ b/setup.py
@@ -4,7 +4,7 @@ import sys
setup(
name='ampel',
- version='0.2.3',
+ version='0.3.0',
description='uses the ampel',
long_description=open("README.md").read(),