#! /usr/bin/python3

import RPi.GPIO as GPIO
import time
import os

GPIO.setmode(GPIO.BCM)

# Die ports für die 7 Segmente

seg={'a':11, 'b':7, 'c':15, 'd':17, 'e':22, 'f':8, 'g':10}
for i in "abcdefg":
    GPIO.setup(seg[i], GPIO.OUT, initial = True)

# Die ports für die 4 Ziffernblöcke

zif = [25, 24, 23, 14]
for i in zif:
    GPIO.setup(i, GPIO.OUT, initial = False)

# Das ist der Port für den Dezimalpunkt

dp = 18
GPIO.setup(dp, GPIO.OUT, initial = True)

zahl = ["abcdef", "bc", "abdeg", "abcdg", "bcfg", "acdfg", "acdefg", "abc", "abcdefg", "abcdfg"]

# Zahl dieses mal nur dreistellig

z = [0,0,0]

CMD = "ip addr show wlan0 | grep inet | awk '{print $2}' | cut -d/ -f1"
ip = os.popen(CMD).readline().strip().split(".")

# Nach der zweiten Zahl (i == 1) soll der Dezimalpunkt eingeschaltet, sonst ausgeschaltet werden.
# False = EIN

def za():
    for i in range(3):
        for s in "abcdefg":
            GPIO.output(seg[s], True)
        GPIO.output(zif[i], True)
        for s in zahl[z[i]]:
            GPIO.output(seg[s], False)
        time.sleep(0.003)
        GPIO.output(zif[i], False)

# Dezimalpunkteaufblinkfunktion

def blink():
    for s in "abcdefg":
        GPIO.output(seg[s], True)
    for k in range(3):
        GPIO.output(zif[k], True)
    GPIO.output(dp, False)
    time.sleep(0.5)
    GPIO.output(dp, True)
    
# Jetzt wird in 2 Schleifen jede IP-Zahl ausgegeben.
# Am Ende der 4 Blöcke macht die Funktion blink(), dass die Dezimalpunkte als Trenner aufblinken

try:
    while True:
        for j in ip:
            for k in range(3):
                z[k] = int(j.rjust(3, "0")[k])
            sek = time.time()
            while time.time() <= sek + 1:
                za()
        blink()

# Aus und Ende

except KeyboardInterrupt:
    GPIO.cleanup()