first commit

This commit is contained in:
2022-08-24 08:10:10 +02:00
commit d3b4ff8398
520 changed files with 223703 additions and 0 deletions
+178
View File
@@ -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)
BIN
View File
Binary file not shown.
+120
View File
@@ -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
+9
View File
@@ -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)
+21
View File
@@ -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)