first commit
This commit is contained in:
Executable
+178
@@ -0,0 +1,178 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Original code found at:
|
||||
# https://gist.github.com/DenisFromHR/cc863375a6e19dce359d
|
||||
|
||||
"""
|
||||
Compiled, mashed and generally mutilated 2014-2015 by Denis Pleic
|
||||
Made available under GNU GENERAL PUBLIC LICENSE
|
||||
|
||||
# Modified Python I2C library for Raspberry Pi
|
||||
# as found on http://www.recantha.co.uk/blog/?p=4849
|
||||
# Joined existing 'i2c_lib.py' and 'lcddriver.py' into a single library
|
||||
# added bits and pieces from various sources
|
||||
# By DenisFromHR (Denis Pleic)
|
||||
# 2015-02-10, ver 0.1
|
||||
|
||||
"""
|
||||
|
||||
# i2c bus (0 -- original Pi, 1 -- Rev 2 Pi)
|
||||
I2CBUS = 0
|
||||
|
||||
# LCD Address
|
||||
ADDRESS = 0x27
|
||||
|
||||
import smbus
|
||||
from time import sleep
|
||||
|
||||
class i2c_device:
|
||||
def __init__(self, addr, port=I2CBUS):
|
||||
self.addr = addr
|
||||
self.bus = smbus.SMBus(port)
|
||||
|
||||
# Write a single command
|
||||
def write_cmd(self, cmd):
|
||||
self.bus.write_byte(self.addr, cmd)
|
||||
sleep(0.0001)
|
||||
|
||||
# Write a command and argument
|
||||
def write_cmd_arg(self, cmd, data):
|
||||
self.bus.write_byte_data(self.addr, cmd, data)
|
||||
sleep(0.0001)
|
||||
|
||||
# Write a block of data
|
||||
def write_block_data(self, cmd, data):
|
||||
self.bus.write_block_data(self.addr, cmd, data)
|
||||
sleep(0.0001)
|
||||
|
||||
# Read a single byte
|
||||
def read(self):
|
||||
return self.bus.read_byte(self.addr)
|
||||
|
||||
# Read
|
||||
def read_data(self, cmd):
|
||||
return self.bus.read_byte_data(self.addr, cmd)
|
||||
|
||||
# Read a block of data
|
||||
def read_block_data(self, cmd):
|
||||
return self.bus.read_block_data(self.addr, cmd)
|
||||
|
||||
|
||||
# commands
|
||||
LCD_CLEARDISPLAY = 0x01
|
||||
LCD_RETURNHOME = 0x02
|
||||
LCD_ENTRYMODESET = 0x04
|
||||
LCD_DISPLAYCONTROL = 0x08
|
||||
LCD_CURSORSHIFT = 0x10
|
||||
LCD_FUNCTIONSET = 0x20
|
||||
LCD_SETCGRAMADDR = 0x40
|
||||
LCD_SETDDRAMADDR = 0x80
|
||||
|
||||
# flags for display entry mode
|
||||
LCD_ENTRYRIGHT = 0x00
|
||||
LCD_ENTRYLEFT = 0x02
|
||||
LCD_ENTRYSHIFTINCREMENT = 0x01
|
||||
LCD_ENTRYSHIFTDECREMENT = 0x00
|
||||
|
||||
# flags for display on/off control
|
||||
LCD_DISPLAYON = 0x04
|
||||
LCD_DISPLAYOFF = 0x00
|
||||
LCD_CURSORON = 0x02
|
||||
LCD_CURSOROFF = 0x00
|
||||
LCD_BLINKON = 0x01
|
||||
LCD_BLINKOFF = 0x00
|
||||
|
||||
# flags for display/cursor shift
|
||||
LCD_DISPLAYMOVE = 0x08
|
||||
LCD_CURSORMOVE = 0x00
|
||||
LCD_MOVERIGHT = 0x04
|
||||
LCD_MOVELEFT = 0x00
|
||||
|
||||
# flags for function set
|
||||
LCD_8BITMODE = 0x10
|
||||
LCD_4BITMODE = 0x00
|
||||
LCD_2LINE = 0x08
|
||||
LCD_1LINE = 0x00
|
||||
LCD_5x10DOTS = 0x04
|
||||
LCD_5x8DOTS = 0x00
|
||||
|
||||
# flags for backlight control
|
||||
LCD_BACKLIGHT = 0x08
|
||||
LCD_NOBACKLIGHT = 0x00
|
||||
|
||||
En = 0b00000100 # Enable bit
|
||||
Rw = 0b00000010 # Read/Write bit
|
||||
Rs = 0b00000001 # Register select bit
|
||||
|
||||
class lcd:
|
||||
#initializes objects and lcd
|
||||
def __init__(self):
|
||||
self.lcd_device = i2c_device(ADDRESS)
|
||||
|
||||
self.lcd_write(0x03)
|
||||
self.lcd_write(0x03)
|
||||
self.lcd_write(0x03)
|
||||
self.lcd_write(0x02)
|
||||
|
||||
self.lcd_write(LCD_FUNCTIONSET | LCD_2LINE | LCD_5x8DOTS | LCD_4BITMODE)
|
||||
self.lcd_write(LCD_DISPLAYCONTROL | LCD_DISPLAYON)
|
||||
self.lcd_write(LCD_CLEARDISPLAY)
|
||||
self.lcd_write(LCD_ENTRYMODESET | LCD_ENTRYLEFT)
|
||||
sleep(0.2)
|
||||
|
||||
|
||||
# clocks EN to latch command
|
||||
def lcd_strobe(self, data):
|
||||
self.lcd_device.write_cmd(data | En | LCD_BACKLIGHT)
|
||||
sleep(.0005)
|
||||
self.lcd_device.write_cmd(((data & ~En) | LCD_BACKLIGHT))
|
||||
sleep(.0001)
|
||||
|
||||
def lcd_write_four_bits(self, data):
|
||||
self.lcd_device.write_cmd(data | LCD_BACKLIGHT)
|
||||
self.lcd_strobe(data)
|
||||
|
||||
# write a command to lcd
|
||||
def lcd_write(self, cmd, mode=0):
|
||||
self.lcd_write_four_bits(mode | (cmd & 0xF0))
|
||||
self.lcd_write_four_bits(mode | ((cmd << 4) & 0xF0))
|
||||
|
||||
# write a character to lcd (or character rom) 0x09: backlight | RS=DR<
|
||||
# works!
|
||||
def lcd_write_char(self, charvalue, mode=1):
|
||||
self.lcd_write_four_bits(mode | (charvalue & 0xF0))
|
||||
self.lcd_write_four_bits(mode | ((charvalue << 4) & 0xF0))
|
||||
|
||||
# put string function with optional char positioning
|
||||
def lcd_display_string(self, string, line=1, pos=0):
|
||||
if line == 1:
|
||||
pos_new = pos
|
||||
elif line == 2:
|
||||
pos_new = 0x40 + pos
|
||||
elif line == 3:
|
||||
pos_new = 0x14 + pos
|
||||
elif line == 4:
|
||||
pos_new = 0x54 + pos
|
||||
|
||||
self.lcd_write(0x80 + pos_new)
|
||||
|
||||
for char in string:
|
||||
self.lcd_write(ord(char), Rs)
|
||||
|
||||
# clear lcd and set to home
|
||||
def lcd_clear(self):
|
||||
self.lcd_write(LCD_CLEARDISPLAY)
|
||||
self.lcd_write(LCD_RETURNHOME)
|
||||
|
||||
# define backlight on/off (lcd.backlight(1); off= lcd.backlight(0)
|
||||
def backlight(self, state): # for state, 1 = on, 0 = off
|
||||
if state == 1:
|
||||
self.lcd_device.write_cmd(LCD_BACKLIGHT)
|
||||
elif state == 0:
|
||||
self.lcd_device.write_cmd(LCD_NOBACKLIGHT)
|
||||
|
||||
# add custom characters (0 - 7)
|
||||
def lcd_load_custom_chars(self, fontdata):
|
||||
self.lcd_write(0x40);
|
||||
for char in fontdata:
|
||||
for line in char:
|
||||
self.lcd_write_char(line)
|
||||
Executable
BIN
Binary file not shown.
Executable
+120
@@ -0,0 +1,120 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: UTF-8 -*-
|
||||
#(c) Xavier 2020
|
||||
import os
|
||||
import array
|
||||
from difflib import get_close_matches
|
||||
import fileinput
|
||||
import I2C_LCD_driver
|
||||
import socket
|
||||
import fcntl
|
||||
import struct
|
||||
import time
|
||||
|
||||
from datetime import datetime
|
||||
from time import sleep
|
||||
|
||||
mylcd = I2C_LCD_driver.lcd()
|
||||
|
||||
#init
|
||||
mylcd.lcd_display_string("FRS2013 (C) 2020", 1)
|
||||
mylcd.lcd_display_string("MMDVM STARTED ", 2)
|
||||
sleep(5)
|
||||
mylcd.lcd_display_string(" ", 1)
|
||||
mylcd.lcd_display_string(" ", 2)
|
||||
|
||||
def get_ip_address(ifname):
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||
return socket.inet_ntoa(fcntl.ioctl(
|
||||
s.fileno(),
|
||||
0x8915,
|
||||
struct.pack('256s', ifname[:15])
|
||||
)[20:24])
|
||||
|
||||
|
||||
cpt = 0
|
||||
cpt1 = 0
|
||||
while True:
|
||||
maintenant = datetime.now()
|
||||
month_str=""
|
||||
mois = maintenant.month
|
||||
if (mois<10):
|
||||
month_str="0"
|
||||
day_str=""
|
||||
jour= maintenant.day
|
||||
if (jour<10):
|
||||
day_str="0"
|
||||
oFichier = "/var/log/mmdvmhost/MMDVM-" + str(maintenant.year) + "-" + month_str + str(maintenant.month) + "-" + day_str + str(maintenant.day) +".log"
|
||||
oLog1 = open( oFichier,'r')
|
||||
oLog2 = open( oFichier,'r')
|
||||
#init var
|
||||
numeroLigne = 1
|
||||
var = ""
|
||||
|
||||
for line in oLog1 :
|
||||
# On ne considère pas les lignes vides
|
||||
if line != "" :
|
||||
if ("DMR Slot 2, received RF voice header from" in line) or ("DMR Slot 2, received network voice header from" in line):
|
||||
var = line.split(" ")
|
||||
#print (var)
|
||||
typeradio = var[3]
|
||||
time_start = var[2]
|
||||
var1= time_start.split(":")
|
||||
#print(var1)
|
||||
heure_start = var1[0]
|
||||
minute_start = var1[1]
|
||||
seconde_start = var1[2]
|
||||
callid = var[11]
|
||||
sl = var[5]
|
||||
sl = sl.replace(",","")
|
||||
tg = var[14]
|
||||
tg = tg.replace("\n", "")
|
||||
|
||||
oLog1.close()
|
||||
#print ("Typeradio=",typeradio,"Heure",heure_start,"minute=",minute_start,"seconde=",seconde_start,"ID=",callid,"TG=",tg)
|
||||
|
||||
for line1 in oLog2 :
|
||||
# On ne considère pas les lignes vides
|
||||
if line1 != "" :
|
||||
if ("DMR Slot 2, received RF end of voice transmission from" in line1) or ("DMR Slot 2, received network end of voice transmission from" in line1):
|
||||
var11 = line1.split(" ")
|
||||
#print (var11)
|
||||
time_end = var11[2]
|
||||
var2= time_end.split(":")
|
||||
#print(var2)
|
||||
heure_end = var2[0]
|
||||
minute_end = var2[1]
|
||||
seconde_end = var2[2]
|
||||
|
||||
callid_end = var11[13]
|
||||
|
||||
|
||||
oLog2.close()
|
||||
#print ("Heureend=",heure_end,"minute=",minute_end,"seconde=",seconde_end,"IDEND=",callid_end)
|
||||
|
||||
#print("CallID=",callid,"CallidEnd=",callid_end)
|
||||
#print("Heurestart=",heure_start,"Heure_end=",heure_end)
|
||||
#print("Minutrestart=",minute_start,"Minute_end=",minute_end)
|
||||
#print("Secondestart=",seconde_start,"Seconde_end=",seconde_end)
|
||||
|
||||
if (callid!=callid_end) or ( (callid==callid_end) and (heure_start>=heure_end) and (minute_start>=minute_end) and (seconde_start>seconde_end) ) :
|
||||
body1 = "ID:" + callid + " "
|
||||
body2 = typeradio + " SL:"+ sl +" TG:" + tg + " "
|
||||
mylcd.lcd_display_string("%s " %body1, 1)
|
||||
mylcd.lcd_display_string("%s " %body2, 2)
|
||||
sleep(1)
|
||||
else:
|
||||
cpt1 = cpt1 + 1
|
||||
cpt = cpt + 1
|
||||
mylcd.lcd_display_string("Time: %s" %time.strftime("%H:%M:%S"), 1)
|
||||
if (cpt>25):
|
||||
mylcd.lcd_display_string("LASTID:" + callid + ' ', 2)
|
||||
else:
|
||||
if (cpt1 > 200):
|
||||
mylcd.lcd_display_string("IP:" + get_ip_address('wlan0') + ' ', 2)
|
||||
else:
|
||||
mylcd.lcd_display_string("IP: unknow ", 2)
|
||||
if (cpt>50):
|
||||
cpt=0
|
||||
|
||||
|
||||
Executable
+9
@@ -0,0 +1,9 @@
|
||||
import I2C_LCD_driver
|
||||
import time
|
||||
mylcd = I2C_LCD_driver.lcd()
|
||||
|
||||
|
||||
while True:
|
||||
mylcd.lcd_display_string("Time: %s" %time.strftime("%H:%M:%S"), 1)
|
||||
|
||||
mylcd.lcd_display_string("Date: %s" %time.strftime("%m/%d/%Y"), 2)
|
||||
Executable
+21
@@ -0,0 +1,21 @@
|
||||
import I2C_LCD_driver
|
||||
import socket
|
||||
import fcntl
|
||||
import struct
|
||||
import time
|
||||
mylcd = I2C_LCD_driver.lcd()
|
||||
|
||||
def get_ip_address(ifname):
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||
return socket.inet_ntoa(fcntl.ioctl(
|
||||
s.fileno(),
|
||||
0x8915,
|
||||
struct.pack('256s', ifname[:15])
|
||||
)[20:24])
|
||||
|
||||
mylcd.lcd_display_string("IP Address:", 1)
|
||||
|
||||
mylcd.lcd_display_string(get_ip_address('wlan0'), 2)
|
||||
|
||||
while True:
|
||||
mylcd.lcd_display_string("Time: %s" %time.strftime("%H:%M:%S"), 1)
|
||||
Reference in New Issue
Block a user