Version 0.2 - Change date/time display to match the new source (feather RTC !).

Update doc, comments, licence, version...
This commit is contained in:
Pierrick C 2018-08-04 20:33:14 +02:00
parent be8d28a2f9
commit c96f7b86ae
2 changed files with 65 additions and 45 deletions

View File

@ -1,9 +1,25 @@
# -*- coding: utf-8 -*- #!/usr/bin/python3
# -*- coding: UTF8 -*-
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
""" """
Display data from MQTT broker on ePaper screen Display data from MQTT broker on ePaper screen
@author: arofarn @author: arofarn
""" """
__version__ = 0.2
########### ###########
# IMPORTS # # IMPORTS #
@ -25,11 +41,10 @@ mqtt_client_id = "epaper_display"
white = 255 white = 255
black = 0 black = 0
def update_epd():
""" """
Update ePaper Display Update ePaper Display
""" """
def update_epd():
#rotation de l'image de 90° + 180° si le paramètre epd_rotate est différent de 0 #rotation de l'image de 90° + 180° si le paramètre epd_rotate est différent de 0
# la translation permet de rattraper un petit décalage en cas de rotation de 90+180° # la translation permet de rattraper un petit décalage en cas de rotation de 90+180°
screen = image.rotate(90 + (epd_rotate * 180), expand=True, translate=(-6*epd_rotate, 0)) screen = image.rotate(90 + (epd_rotate * 180), expand=True, translate=(-6*epd_rotate, 0))
@ -41,10 +56,10 @@ def update_epd():
# CALLBACKS # # CALLBACKS #
############# #############
def on_connect(client, userdata, flags, rc):
""" """
Callback pour la connection au MQTT : souscriptions aux topics Callback pour la connection au MQTT : souscriptions aux topics
""" """
def on_connect(client, userdata, flags, rc):
print(mqtt.connack_string(rc)) print(mqtt.connack_string(rc))
if rc == 0: if rc == 0:
print("Subscribing to %s ..." % mqtt_topic) print("Subscribing to %s ..." % mqtt_topic)
@ -53,11 +68,12 @@ def on_connect(client, userdata, flags, rc):
) )
print("OK") print("OK")
def on_message(client, userdata, msg):
""" """
Callback de gestion des messages arrivant au MQTT : Callback de gestion des messages arrivant au MQTT :
affichage et enregistrement en base de données affichage et enregistrement en base de données
""" """
def on_message(client, userdata, msg):
top=msg.topic[len(mqtt_topic)-1:].strip() top=msg.topic[len(mqtt_topic)-1:].strip()
subtopics = top.split("/") subtopics = top.split("/")
@ -65,7 +81,6 @@ def on_message(client, userdata, msg):
payload = msg.payload.decode() payload = msg.payload.decode()
val = json.loads(payload) val = json.loads(payload)
#Test présence et cohérence de la valeur #Test présence et cohérence de la valeur
try: try:
val['value'] = float(val['value'] ) val['value'] = float(val['value'] )
@ -85,38 +100,35 @@ def on_message(client, userdata, msg):
print(val) print(val)
if val['type'] in coord_type: if val['type'] in coord_type:
#erase former text #erase former text
draw.rectangle(coord_type[val['type']] + (coord_type[val['type']][0] + 112, draw.rectangle(coord_type[val['type']] + (coord_type[val['type']][0] + 112, coord_type[val['type']][1] + 20), fill=white)
coord_type[val['type']][1] + 20),
fill=white)
#draw new values #draw new values
draw.text(coord_type[val['type']], draw.text(coord_type[val['type']],
"{:6.1f}{} ".format(val['value'], val['unit']), "{:6.1f}{} ".format(val['value'], val['unit']),
font=font20_bold, font=font20_bold,
fill=black) fill=black)
update_epd()
""" # Print feather's date and time on epaper display
Callback managing date and time from MQTT broker elif subtopics[0] == "SYS":
"""
def on_message_date(client, userdata, msg):
payload = msg.payload.decode() payload = msg.payload.decode()
print("Date : " + payload) val = json.loads(payload)
if val['type'] == "TIME":
try: try:
#Mise en forme de la date et heure reçu pour fuseau horaire configuré #Mise en forme de la date et heure reçu pour fuseau horaire configuré
dt_texte = datetime.strftime(datetime.strptime(payload, "%H:%M:%S %d/%m/%Y") + TimeZone.utcoffset(None), "%d/%m/%Y %H:%M:%S") dt_texte = datetime.strftime(datetime.strptime(val['value'], "%Y/%m/%d_%H:%M:%S") + TimeZone.utcoffset(None),
"%d/%m/%Y %H:%M:%S")
except: except:
dt_texte = payload dt_texte = payload
print(dt_texte)
#Affichage du résultat
draw.rectangle((0, 34, epd2in13.EPD_HEIGHT, 48), fill=white) draw.rectangle((0, 34, epd2in13.EPD_HEIGHT, 48), fill=white)
draw.text((0, 34), dt_texte, font=font14, fill=black) draw.text((0, 34), dt_texte, font=font14, fill=black)
update_epd() update_epd()
def on_message_camera(client, userdata, msg):
""" """
Update display with info from camera (camera shooting new photo or name of the Update display with info from camera (camera shooting new photo or name of the
last photo) last photo)
""" """
def on_message_camera(client, userdata, msg):
pl = msg.payload.decode() pl = msg.payload.decode()
print("{} : {} ({})".format(msg.topic, pl, type(pl))) print("{} : {} ({})".format(msg.topic, pl, type(pl)))
@ -132,10 +144,11 @@ def on_message_camera(client, userdata, msg):
draw.text((0, 106), "Last: " + pl, font=font14, fill=black) draw.text((0, 106), "Last: " + pl, font=font14, fill=black)
update_epd() update_epd()
def on_disconnect(client, userdata, msg):
""" """
Callback de déconnexion au broker MQTT Callback de déconnexion au broker MQTT
""" """
def on_disconnect(client, userdata, msg):
if msg != 0: if msg != 0:
print("Déconnexion imprévu : %s" % msg) print("Déconnexion imprévu : %s" % msg)
exit() exit()
@ -168,8 +181,15 @@ draw = ImageDraw.Draw(image)
#Draw basic text and frame : #Draw basic text and frame :
draw.rectangle((0, 0, epd2in13.EPD_HEIGHT, 18), fill=black) draw.rectangle((0, 0, epd2in13.EPD_HEIGHT, 18), fill=black)
draw.text((60, 1), "Projet Camétéo", font=font16_bold, fill=white) draw.text((60, 1),
draw.text((0, 19), "{} : IP= {}".format(socket.gethostname(), netifaces.ifaddresses('wlan0')[2][0]['addr']), font = font12, fill=black ) "Projet Camétéo",
font=font16_bold,
fill=white)
draw.text((0, 19),
"{} : IP= {}".format(socket.gethostname(),
netifaces.ifaddresses('wlan0')[2][0]['addr']),
font = font12,
fill=black )
draw.line((0,49,epd2in13.EPD_HEIGHT, 49), fill=black) draw.line((0,49,epd2in13.EPD_HEIGHT, 49), fill=black)
draw.line((0,71,epd2in13.EPD_HEIGHT, 71), fill=black) draw.line((0,71,epd2in13.EPD_HEIGHT, 71), fill=black)
draw.line((0,93,epd2in13.EPD_HEIGHT, 93), fill=black) draw.line((0,93,epd2in13.EPD_HEIGHT, 93), fill=black)
@ -194,7 +214,7 @@ mqtt_client.on_connect = on_connect
mqtt_client.on_message = on_message mqtt_client.on_message = on_message
mqtt_client.on_disconnect = on_disconnect mqtt_client.on_disconnect = on_disconnect
mqtt_client.message_callback_add("huzzah0/NTP/date", on_message_date) #mqtt_client.message_callback_add("feather0/NTP/date", on_message_date)
mqtt_client.message_callback_add(camera_mqtt_topic + "/#", on_message_camera) mqtt_client.message_callback_add(camera_mqtt_topic + "/#", on_message_camera)
print(mqtt_host + ":" + str(mqtt_port)) print(mqtt_host + ":" + str(mqtt_port))

View File

@ -17,7 +17,7 @@
""" """
Transmit data from UART (GPIO) to MQTT broker Transmit data from UART (GPIO) to MQTT broker
""" """
__version__ = "0.1" __version__ = "0.2"
# Dictionnary of data types and units # Dictionnary of data types and units
data_type = {'cput' : "AT", data_type = {'cput' : "AT",