Telegram Bot auf LCD
Verfasst: Donnerstag 5. November 2020, 16:12
Hallo,
Ich nutze gerade einen Raspi um mir mir Telegramnachrichten auf einem LCD Screen auszugeben.
Das funktioniert auch, aber nur für Nachrichten die ich ihm schicke. Ich würde gerne auch die Nachrichten ausgegeben bekommen, die andere Bots mir schicken.
Als Hintergrund: Ich betreibe mehrere Luftfilteranlagen und muss dazu verschiedene Sachen an verschiedenen Orten messen. Also schickt mir mein Raspi 1 (ein eigener Bot) bei Überschreitung eines gewissen Wertes eine Telegram Nachricht. Raspi 2(auch eine eigener Bot) tut das gleiche wie Bot 1. Beide Bots sind mit mir und ein paar Mitarbeitern in einer Gruppe. Sollte jetzt also was passieren bekommen alle die Nachricht. Das funktioniert soweit auch sehr gut!
Jetzt habe ich überlegt mir einen kleinen Status LCD Screen ins Büro zu machen. Dieser LCD Screen stammt von meinem Junior (ist glaube von Sunfounder oder so ähnlich) und ich habe mir den LCD Screen angeschlossen. Habe also einen weiteren Bot gestartet der auf dem Raspi LCD läuft. Dieser ist auch in der Gruppe mit den Mitarbeitern und den Bots. Sollte jetzt eine Nachricht kommen, soll der LCD Screen diese anzeigen.
Dies funktioniert auch... aber nur solange ich oder ein Mitarbeiter schreibt. Die Nachrichten der Bots werden nicht angezeigt. Konnte man es verstehen und hat damit jemand Erfahrung?
Ich nutze gerade einen Raspi um mir mir Telegramnachrichten auf einem LCD Screen auszugeben.
Das funktioniert auch, aber nur für Nachrichten die ich ihm schicke. Ich würde gerne auch die Nachrichten ausgegeben bekommen, die andere Bots mir schicken.
Als Hintergrund: Ich betreibe mehrere Luftfilteranlagen und muss dazu verschiedene Sachen an verschiedenen Orten messen. Also schickt mir mein Raspi 1 (ein eigener Bot) bei Überschreitung eines gewissen Wertes eine Telegram Nachricht. Raspi 2(auch eine eigener Bot) tut das gleiche wie Bot 1. Beide Bots sind mit mir und ein paar Mitarbeitern in einer Gruppe. Sollte jetzt also was passieren bekommen alle die Nachricht. Das funktioniert soweit auch sehr gut!
Jetzt habe ich überlegt mir einen kleinen Status LCD Screen ins Büro zu machen. Dieser LCD Screen stammt von meinem Junior (ist glaube von Sunfounder oder so ähnlich) und ich habe mir den LCD Screen angeschlossen. Habe also einen weiteren Bot gestartet der auf dem Raspi LCD läuft. Dieser ist auch in der Gruppe mit den Mitarbeitern und den Bots. Sollte jetzt eine Nachricht kommen, soll der LCD Screen diese anzeigen.
Dies funktioniert auch... aber nur solange ich oder ein Mitarbeiter schreibt. Die Nachrichten der Bots werden nicht angezeigt. Konnte man es verstehen und hat damit jemand Erfahrung?
Code: Alles auswählen
#!/usr/bin/env python3
import time
import smbus
import telebot
BUS = smbus.SMBus(1)
def write_word(addr, data):
global BLEN
temp = data
if BLEN == 1:
temp |= 0x08
else:
temp &= 0xF7
BUS.write_byte(addr ,temp)
def send_command(comm):
# Send bit7-4 firstly
buf = comm & 0xF0
buf |= 0x04 # RS = 0, RW = 0, EN = 1
write_word(LCD_ADDR ,buf)
time.sleep(0.002)
buf &= 0xFB # Make EN = 0
write_word(LCD_ADDR ,buf)
# Send bit3-0 secondly
buf = (comm & 0x0F) << 4
buf |= 0x04 # RS = 0, RW = 0, EN = 1
write_word(LCD_ADDR ,buf)
time.sleep(0.002)
buf &= 0xFB # Make EN = 0
write_word(LCD_ADDR ,buf)
def send_data(data):
buf = data & 0xF0
buf |= 0x05 # RS = 1, RW = 0, EN = 1
write_word(LCD_ADDR ,buf)
time.sleep(0.002)
buf &= 0xFB # Make EN = 0
write_word(LCD_ADDR ,buf)
buf = (data & 0x0F) << 4
buf |= 0x05 # RS = 1, RW = 0, EN = 1
write_word(LCD_ADDR ,buf)
time.sleep(0.002)
buf &= 0xFB # Make EN = 0
write_word(LCD_ADDR ,buf)
def init(addr, bl):
# global BUS
# BUS = smbus.SMBus(1)
global LCD_ADDR
global BLEN
LCD_ADDR = addr
BLEN = bl
try:
send_command(0x33) # Must initialize to 8-line mode at first
time.sleep(0.005)
send_command(0x32) # Then initialize to 4-line mode
time.sleep(0.005)
send_command(0x28) # 2 Lines & 5*7 dots
time.sleep(0.005)
send_command(0x0C) # Enable display without cursor
time.sleep(0.005)
send_command(0x01) # Clear Screen
BUS.write_byte(LCD_ADDR, 0x08)
except:
return False
else:
return True
def clear():
send_command(0x01)
def openlight(): # Enable the backlight
BUS.write_byte(0x27,0x08)
BUS.close()
def write(x, y, str):
if x < 0:
x = 0
if x > 15:
x = 15
if y <0:
y = 0
if y > 1:
y = 1
addr = 0x80 + 0x40 * y + x
send_command(addr)
for chr in str:
send_data(ord(chr))
bot = telebot.TeleBot('12345678910111BLABLABLA')
@bot.message_handler(content_types=['text'])
def handle_text(message):
init(0x27, 1)
write(4, 0, message.from_user.first_name)
write(0, 1, message.text)
bot.polling()