Compare commits
	
		
			23 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					5e6ec59cde | ||
| 
						 | 
					96742e5b52 | ||
| 
						 | 
					ad09101f47 | ||
| 
						 | 
					4aa286423a | ||
| 
						 | 
					52d36f88f5 | ||
| 
						 | 
					99c0ab9705 | ||
| 
						 | 
					addd26004c | ||
| 
						 | 
					066e0857eb | ||
| 
						 | 
					4a793d4018 | ||
| 
						 | 
					656ed147b5 | ||
| 
						 | 
					61432fdf72 | ||
| 
						 | 
					9686365dfd | ||
| 
						 | 
					ffeb80d66f | ||
| 
						 | 
					bbcf2810be | ||
| 
						 | 
					879e75928b | ||
| 
						 | 
					b5f20c207e | ||
| 
						 | 
					bc15edfa11 | ||
| 
						 | 
					42fcbc34d2 | ||
| 
						 | 
					d5d72f3fda | ||
| 
						 | 
					6725dceef6 | ||
| 
						 | 
					2127471310 | ||
| 
						 | 
					348d6dd2f3 | ||
| 
						 | 
					5255f319f1 | 
							
								
								
									
										99
									
								
								examples/date-diff.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										99
									
								
								examples/date-diff.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,99 @@
 | 
			
		||||
#!/usr/bin/python
 | 
			
		||||
# -*- coding:utf-8 -*-
 | 
			
		||||
import sys
 | 
			
		||||
import os
 | 
			
		||||
picdir = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), 'pic')
 | 
			
		||||
libdir = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), 'lib')
 | 
			
		||||
if os.path.exists(libdir):
 | 
			
		||||
    sys.path.append(libdir)
 | 
			
		||||
 | 
			
		||||
import logging
 | 
			
		||||
from waveshare_epd import epd2in13b_V3
 | 
			
		||||
import time
 | 
			
		||||
from PIL import Image,ImageDraw,ImageFont
 | 
			
		||||
import traceback
 | 
			
		||||
 | 
			
		||||
logging.basicConfig(level=logging.DEBUG)
 | 
			
		||||
 | 
			
		||||
#Define Display
 | 
			
		||||
epd = epd2in13b_V3.EPD()
 | 
			
		||||
epd.init()
 | 
			
		||||
 | 
			
		||||
#Set fonts
 | 
			
		||||
font12 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 12)
 | 
			
		||||
font14 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 14)
 | 
			
		||||
font16 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 16)
 | 
			
		||||
font18 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 18)
 | 
			
		||||
 | 
			
		||||
#Init Image
 | 
			
		||||
HBlackimage = Image.new('1', (epd.height, epd.width), 255)  # 298*126
 | 
			
		||||
HRYimage = Image.new('1', (epd.height, epd.width), 255)  # 298*126  ryimage: red or yellow image  
 | 
			
		||||
drawblack = ImageDraw.Draw(HBlackimage)
 | 
			
		||||
#drawry = ImageDraw.Draw(HRYimage)
 | 
			
		||||
 | 
			
		||||
import time
 | 
			
		||||
import datetime
 | 
			
		||||
import locale
 | 
			
		||||
 | 
			
		||||
loc = locale.getlocale()
 | 
			
		||||
print (loc)
 | 
			
		||||
 | 
			
		||||
from datetime import datetime, timedelta, date
 | 
			
		||||
# Zwei datetime-Objekte erstellen
 | 
			
		||||
# from datetime import date
 | 
			
		||||
 | 
			
		||||
start_time = date.today() 
 | 
			
		||||
print(start_time.strftime("%d.%m.%Y"))
 | 
			
		||||
ruhestand = date(2026, 6, 10) 
 | 
			
		||||
# Zeitdelta berechnen 
 | 
			
		||||
duration = ruhestand - start_time 
 | 
			
		||||
print(duration) # Ausgabe: 9 Tage, 2:30:00
 | 
			
		||||
 | 
			
		||||
def init_monitor():
 | 
			
		||||
    
 | 
			
		||||
    logging.info("epd2in13b_V3 Demo")
 | 
			
		||||
 | 
			
		||||
    #epd = epd2in13b_V3.EPD()
 | 
			
		||||
    #epd.init()
 | 
			
		||||
    #epd.Clear()
 | 
			
		||||
    
 | 
			
		||||
    # Drawing on the image
 | 
			
		||||
    #logging.info("Drawing")    
 | 
			
		||||
    #font16 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 16)
 | 
			
		||||
    #font18 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 18)
 | 
			
		||||
    
 | 
			
		||||
    # Drawing on the Horizontal image
 | 
			
		||||
    logging.info("1.Drawing on the Horizontal image...") 
 | 
			
		||||
    drawblack.text((4, 0), 'Lieber Reinhold, in: ' + str(duration.days) + " Tagen", font = font12, fill = 0)
 | 
			
		||||
    drawblack.text((4, 13), 'Oder ' + str(round(duration.days / 7,2)) + " Wochen", font = font14, fill = 0)
 | 
			
		||||
    drawblack.text((4, 28), 'Oder ' + str(round(duration.days / 30,2)) + " Monate", font = font14, fill = 0)
 | 
			
		||||
    drawblack.text((4, 43), 'Oder ' + str(duration.days * 24) + " Stunden", font = font14, fill = 0)
 | 
			
		||||
    drawblack.text((4, 58), 'Oder ' + str(round(duration.days / 365,2)) + " Jahre", font = font14, fill = 0)
 | 
			
		||||
    drawblack.text((4, 73), "Wirst du am: " + str(ruhestand.strftime("%d.%m.%Y")), font = font14, fill = 0)
 | 
			
		||||
    drawblack.text((14, 88), "in den Ruhestand gehen!!!!!", font = font14, fill = 0)
 | 
			
		||||
    
 | 
			
		||||
    epd.display(epd.getbuffer(HBlackimage), epd.getbuffer(HRYimage))
 | 
			
		||||
 | 
			
		||||
    #logging.info("Clear...")
 | 
			
		||||
    #epd.init()
 | 
			
		||||
    #epd.Clear()
 | 
			
		||||
    
 | 
			
		||||
    print(drawblack)
 | 
			
		||||
 | 
			
		||||
    logging.info("Goto Sleep...")
 | 
			
		||||
    epd.sleep()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def run():
 | 
			
		||||
    try:
 | 
			
		||||
        init_monitor()
 | 
			
		||||
 | 
			
		||||
    except IOError as e:
 | 
			
		||||
        logging.info(e)
 | 
			
		||||
 | 
			
		||||
    except KeyboardInterrupt:    
 | 
			
		||||
        logging.info("ctrl + c:")
 | 
			
		||||
        epd2in13b_V3.epdconfig.module_exit()
 | 
			
		||||
        exit()
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    run()          
 | 
			
		||||
@ -1,174 +0,0 @@
 | 
			
		||||
#!/usr/bin/python
 | 
			
		||||
# -*- coding:utf-8 -*-
 | 
			
		||||
import sys
 | 
			
		||||
import os
 | 
			
		||||
picdir = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), 'pic')
 | 
			
		||||
libdir = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), 'lib')
 | 
			
		||||
if os.path.exists(libdir):
 | 
			
		||||
    sys.path.append(libdir)
 | 
			
		||||
 | 
			
		||||
import logging
 | 
			
		||||
from waveshare_epd import epd2in13b_V3
 | 
			
		||||
#import waveshare-epaper
 | 
			
		||||
import time
 | 
			
		||||
from PIL import Image,ImageDraw,ImageFont
 | 
			
		||||
import traceback
 | 
			
		||||
 | 
			
		||||
# Import MQTT client.
 | 
			
		||||
from paho.mqtt import client as mqtt_client
 | 
			
		||||
 | 
			
		||||
logging.basicConfig(level=logging.DEBUG)
 | 
			
		||||
 | 
			
		||||
# MQTT credentials
 | 
			
		||||
#mqtt_username  = 'homeassistant' # MQTT client username
 | 
			
		||||
#mqtt_password = '3355' # MQTT client password
 | 
			
		||||
client_id = 'solarmonitor'  # unique client_id
 | 
			
		||||
mqtt_broker = "openwb-2"  # broker address, usually your HASS IP address
 | 
			
		||||
port = 1883
 | 
			
		||||
 | 
			
		||||
#set topics
 | 
			
		||||
topic0 = {
 | 
			
		||||
    "topic" : "openWB/bat/get/soc",
 | 
			
		||||
    "line" : "0",
 | 
			
		||||
    "value" : ""
 | 
			
		||||
}
 | 
			
		||||
topic1 = {
 | 
			
		||||
    "topic" : "openWB/bat/get/power",
 | 
			
		||||
    "line" : "16",
 | 
			
		||||
    "value" : ""
 | 
			
		||||
}
 | 
			
		||||
topic2 = {
 | 
			
		||||
    "topic" : "openWB/counter/7/get/power",
 | 
			
		||||
    "line" : "32",
 | 
			
		||||
    "value" : ""
 | 
			
		||||
}
 | 
			
		||||
topic3 = {
 | 
			
		||||
    "topic" : "openWB/pv/8/get/power",
 | 
			
		||||
    "line" : "48",
 | 
			
		||||
    "value" : ""
 | 
			
		||||
}
 | 
			
		||||
topic4 = {
 | 
			
		||||
    "topic" : "openWB/graph/lastlivevaluesJson", #house-power
 | 
			
		||||
    "line" : "64",
 | 
			
		||||
    "value" : ""
 | 
			
		||||
}
 | 
			
		||||
topic5 = {
 | 
			
		||||
    "topic" : "openWB/vehicle/4/get/soc",
 | 
			
		||||
    "line" : "80",
 | 
			
		||||
    "value" : ""
 | 
			
		||||
}
 | 
			
		||||
topic6 = {
 | 
			
		||||
    "topic" : "openWB/internal_chargepoint/0/get/powers",
 | 
			
		||||
    "line" : "80",
 | 
			
		||||
    "value" : ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
topics = {0:topic0,1:topic1,2:topic2,3:topic3,4:topic4,5:topic5,6:topic6}
 | 
			
		||||
 | 
			
		||||
#Define Display
 | 
			
		||||
epd = epd2in13b_V3.EPD()
 | 
			
		||||
epd.init()
 | 
			
		||||
 | 
			
		||||
#Set fonts
 | 
			
		||||
font16 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 16)
 | 
			
		||||
font18 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 18)
 | 
			
		||||
 | 
			
		||||
#Init Image
 | 
			
		||||
HBlackimage = Image.new('1', (epd.height, epd.width), 255)  # 298*126
 | 
			
		||||
HRYimage = Image.new('1', (epd.height, epd.width), 255)  # 298*126  ryimage: red or yellow image  
 | 
			
		||||
drawblack = ImageDraw.Draw(HBlackimage)
 | 
			
		||||
#drawry = ImageDraw.Draw(HRYimage)
 | 
			
		||||
 | 
			
		||||
def connect_mqtt():
 | 
			
		||||
    def on_connect(client, userdata, flags, rc):
 | 
			
		||||
        if rc == 0:
 | 
			
		||||
            logging.info("Connected to MQTT Broker!")
 | 
			
		||||
        else:
 | 
			
		||||
            logging.info("Failed to connect, return code %d\n", rc)
 | 
			
		||||
 | 
			
		||||
    client = mqtt_client.Client(client_id)
 | 
			
		||||
    # client.username_pw_set(username, password)
 | 
			
		||||
    client.on_connect = on_connect
 | 
			
		||||
    client.connect(mqtt_broker, port)
 | 
			
		||||
    return client
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def subscribe(client: mqtt_client, topic):
 | 
			
		||||
    def on_message(client, userdata, msg):
 | 
			
		||||
        print(f"Received `{msg.payload.decode()}` from `{msg.topic}` topic")
 | 
			
		||||
 | 
			
		||||
    client.loop_start()
 | 
			
		||||
    client.subscribe(topic)
 | 
			
		||||
    client.on_message = on_message
 | 
			
		||||
    client.loop_stop()
 | 
			
		||||
 | 
			
		||||
def init_monitor(topics):
 | 
			
		||||
    
 | 
			
		||||
    logging.info("epd2in13b_V3 Demo")
 | 
			
		||||
 | 
			
		||||
    #epd = epd2in13b_V3.EPD()
 | 
			
		||||
    #epd.init()
 | 
			
		||||
    #epd.Clear()
 | 
			
		||||
    
 | 
			
		||||
    # Drawing on the image
 | 
			
		||||
    #logging.info("Drawing")    
 | 
			
		||||
    #font16 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 16)
 | 
			
		||||
    #font18 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 18)
 | 
			
		||||
    
 | 
			
		||||
    # Drawing on the Horizontal image
 | 
			
		||||
    logging.info("1.Drawing on the Horizontal image...") 
 | 
			
		||||
    drawblack.text((4, 0), 'PV Production', font = font16, fill = 0)
 | 
			
		||||
    drawblack.text((4, 16), 'Hausverbrauch', font = font16, fill = 0)
 | 
			
		||||
    drawblack.text((4, 32), 'Strom Import', font = font16, fill = 0)
 | 
			
		||||
    drawblack.text((4, 48), 'Batterie', font = font16, fill = 0)
 | 
			
		||||
    drawblack.text((4, 64), 'Batterie Entladen', font = font16, fill = 0)
 | 
			
		||||
    drawblack.text((4, 80), 'Auto Laden', font = font16, fill = 0)
 | 
			
		||||
    
 | 
			
		||||
    epd.display(epd.getbuffer(HBlackimage), epd.getbuffer(HRYimage))
 | 
			
		||||
 | 
			
		||||
    #logging.info("Clear...")
 | 
			
		||||
    #epd.init()
 | 
			
		||||
    #epd.Clear()
 | 
			
		||||
    
 | 
			
		||||
    print(drawblack)
 | 
			
		||||
 | 
			
		||||
    logging.info("Goto Sleep...")
 | 
			
		||||
    epd.sleep()
 | 
			
		||||
 | 
			
		||||
    #except IOError as e:
 | 
			
		||||
    #    logging.info(e)
 | 
			
		||||
 | 
			
		||||
    #except KeyboardInterrupt:    
 | 
			
		||||
    #    logging.info("ctrl + c:")
 | 
			
		||||
    #    epd2in13b_V3.epdconfig.module_exit()
 | 
			
		||||
    #    exit()
 | 
			
		||||
    
 | 
			
		||||
    #client.loop_forever()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def run():
 | 
			
		||||
    try:
 | 
			
		||||
        init_monitor(topics)
 | 
			
		||||
 | 
			
		||||
    except IOError as e:
 | 
			
		||||
        logging.info(e)
 | 
			
		||||
 | 
			
		||||
    except KeyboardInterrupt:    
 | 
			
		||||
        logging.info("ctrl + c:")
 | 
			
		||||
        epd2in13b_V3.epdconfig.module_exit()
 | 
			
		||||
        exit()
 | 
			
		||||
    
 | 
			
		||||
    client = connect_mqtt()
 | 
			
		||||
 | 
			
		||||
    for topic_id, topic_info in topics.items():
 | 
			
		||||
        print("\nTopic ID:", topic_id)
 | 
			
		||||
    
 | 
			
		||||
        for key in topic_info:
 | 
			
		||||
            print(key + ':', topic_info[key])
 | 
			
		||||
            topic_info["value"] = subscribe(client, topic_info["topic"])
 | 
			
		||||
            print(topic_info["line"])
 | 
			
		||||
            print(topic_info["value"])
 | 
			
		||||
            drawblack.text((160, int(topic_info["line"])), str(topic_info["value"]), font = font16, fill = 0)
 | 
			
		||||
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    run()          
 | 
			
		||||
							
								
								
									
										21
									
								
								examples/time-diff.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								examples/time-diff.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,21 @@
 | 
			
		||||
import time
 | 
			
		||||
import datetime
 | 
			
		||||
import locale
 | 
			
		||||
 | 
			
		||||
loc = locale.getlocale()
 | 
			
		||||
print (loc)
 | 
			
		||||
 | 
			
		||||
from datetime import datetime, timedelta, date
 | 
			
		||||
# Zwei datetime-Objekte erstellen
 | 
			
		||||
# from datetime import date
 | 
			
		||||
 | 
			
		||||
start_time = date.today() 
 | 
			
		||||
print(start_time.strftime("%d.%m.%Y"))
 | 
			
		||||
ruhestand = date(2025, 6, 10) 
 | 
			
		||||
# Zeitdelta berechnen 
 | 
			
		||||
duration = ruhestand - start_time 
 | 
			
		||||
print("Tage: " + str(duration.days)) 
 | 
			
		||||
print("Wochen: " + str(round(duration.days / 7,3))) 
 | 
			
		||||
print("Monate: " + str(round(duration.days / 30,3))) 
 | 
			
		||||
print("Jahre: " + str(round(duration.days / 365,3))) 
 | 
			
		||||
print("Stunden: " + str(duration.days *24)) 
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user