Spremembe Postojna 11.11.2019

ESP32 -microcontroler ala Arduino
- Poganja zvonove in bitje, timing, različne melodije zvonenj in bitja četert
- Rabimo 4 releje za bitje
- in 10 relejev za 5 zvonov naprej in nazaj
- spodaj bi moralo biti dovolj žic za dodatne povezave

Raspberry Pi bi upravljal z Internetno povezavo, s časi in tipi zvonenj, ki jih pošilja ESP32

Z Raspberry Pi bomo posneli čase vklopov in izklopov (impulze) zvonenj in bitja

Maše ta teden - Zvonenje - 15.9.2019 - 21.9.2019

Postojna tedenske maše - speminjanje stalnih

ned: 8:00 D | 10:00 N | 19:00 D |    Uz 05:50 |
pon: 19:00 D |    Uk 01:50 | Uz 05:50 | Uk 23:50
tor: 19:00 D |    Uz 05:50 | Uk 23:50
sre: 19:00 D |    Uz 05:50 | Uk 23:50
čet: 19:00 D |    Uz 05:50 | Uk 23:50
pet: 19:00 D |    Uz 05:50 | Uk 23:50
sob: 19:00 D |    Uz 05:50 | Uk 23:50
Tedensko zvonenje - 15.9.2019 - 21.9.2019

v Ponedeljek 16.9 gre maša iz 19h na 16h
18.9 podaljša bitje ure do 3h ponoči (recimo polnočnica)
20.9 konča bitje ob 19:50 (v Križankah je koncert ob 20h)
(ali večernice in nočemo da nas ura dekoncentrira :)
(ali velik cetrtek in gredo zvonovi v Rim do vigilije damo konec Bitja ob 05:55)
Glede na cerkveno leto se lahko tudi navodila spodaj spreminjajo

Shema:

konfiguracijska datoteka: za Raspberry Pi
Lahko jo RPi sam zahteva ali se mu jo pošlje - da je možno posodobit na daljavo
Vse nastavitve za določeno cerkev
Postojna:
pin32 - GPIO12 - Bitje ura - vel zvon
pin36 - GPIO16 - Bitje Četrt1
pin38 - GPIO20 - Bitje Četrt2
pin40 - GPIO21 - Bitje Četrt3

pin29 - GPIO5 - Zvonenje - Veliki zvon
pin31 - GPIO6 - Zvonenje - zvon 2
pin33 - GPIO13 - Zvonenje - zvon 3
pin35 - GPIO19 - Zvonenje - zvon 4
pin37 - GPIO26 - Zvonenje - zvon 5
da lahko priljucimo še display
1 izhod za poganjanje Ure - motor 1min
1 vhod za zaznavanje pozicij kazalcev 12 in polnoč

IDRaspberry pi - Studenokonfiguracijska datoteka
115min1x mali
230min2x mali
345min3x mali
4ura4x mali - 8s pred polno uro
5bitje ureVeliki - začne točno ob uri
6motor urePremakne uro za 1min naprej
 
11Jutranje 7:0090s Veliki
12opoldne90s Veliki
13večerno60s Veliki | 30s pavza | 60s mali
14petek Jezusovo trplenje90s Veliki
15sobota delopust60s Veliki | 90s Veliki in mali
16delopust praznik60s Veliki | 90s Veliki in mali | pritrkavanja
 
21Maša prvo90s Veliki - če je dovolj mrzlo lahko starta ogrevanje za 90min
22Maša 3/4120s M in V
23Maša90s Veliki
 
24Nedeljska prvo90s Veliki - če je dovolj mrzlo lahko starta ogrevanje za 90min
25Nedeljska 3/4120s M in V
26Nedeljska90s Veliki
 
27Slovesna Maša/praznik prvo90s Veliki - če je dovolj mrzlo lahko starta ogrevanje za 90min
28Slovesna Maša/praznik 3/4120s M in V
29Slovesna Maša/praznik90s Veliki | 60s mali
   lahko še dodatne praznične maše 
41Mrliško otrok60s mali
42Mrliško ženka60s mali | 30s pavza | 60s mali
43Mrliško moški60s mali | 30s pavza | 60s mali | 30s pavza | 60s mali
44Mrliško župnik90s Veliki
45Mrliško Jutranje90s Veliki | 30s pavza | 90s mali
46Mrliško Opoldne90s Veliki | 30s pavza | 90s mali
47Mrliško Večerno90s mali | 30s pavza | 60s Veliki | 30s pavza | 60s mali
 
51Vsi sveti 1.1160s Veliki in mali | 30s pavza | 60s Veliki in mali | 30s pavza | 60s Veliki in mali
    dodatni 
81GretjeČe je dovolj mrzlo (termostat) vklopi gretje pred mašo in greje xx minut
82Odklepanje cerkvepri elektricnih kljucavnicah odklene 20min pred mašo
90Bitje ure zacetekprižge potrebne luči, če je tema ko odklene vrata
91Bitje ure konecprižge potrebne luči, če je tema ko odklene vrata
92Prižiganje večernih lučiprižge potrebne luči, če je tema ko odklene vrata
93Prižiganje mašne luči danprižge luči za mašo 5min prej
94Prižiganje mašne luči večerprižge luči za večerno mašo 5min prej
95Nočne lučiče imamo zunanjo rzsvetljavo



IDInterneturatip
1Jutranje7:0011
2opoldne12:0012
3večernopo datumih13
4petek Jezusovo trplenjepetek 15:0014
5sobota delopustsobota 15:0015
 
10maša-60min21
-15min22
023
 
11Nedeljska masa-60min24
-15min25
026
 
12Slovesna/Praznicna-1dan 15:0016
lahko tudi vec razlicnih-60min27
-15min28
029
 
20Pogreb, otrok10min po objavi41
21Pogreb, ženska10min po objavi42
22Pogreb, moški10min po objavi43
23Pogreb, duhovnik10min po objavi44
 
Pogreb vsi+1dan 7:0045
+1dan 12:0046
+1dan AveM47
 
dan pogreba+Xdan 7:0045
ce ni dopoldne+Xdan 12:0046
-60min21
-15min22



Hardware:
https://www.galagomarket.com/
16 relejev z optocoupler-ji - 19€



Software:
running-things-regularly-cron
cron

https://www.raspberrypi.org/forums/viewtopic.php?t=210974
Watchdog Timer





Firme za zvonove
Poljaki
Italjani





Raspberry Pi:

CRON tab
CRON ob določenih intervalih kliče določene python skripte

min ure dan mesec (dan v tednu 0=nedelja 6=sobota)
59 23 31 12 6 - ce je * recimo na drugem mestu potem vsako uro

* * * * * - vsako minuto - recimo premakni uro za 1min - poglej ce sta kazalca na 12 oz 24 in pocakaj da je ura 12/24
15 * * * * - pogleda ce je ura enable - bije 1/4 - pogleda če je zvonenje
30 * * * * - pogleda ce je ura enable - bije 1/2 - pogleda če je zvonenje
45 * * * * - pogleda ce je ura enable - bije 3/4 - pogleda če je zvonenje
0 * * * * - pogleda ce je ura enable - bije polno uro - pogleda če je zvonenje
3,18,33,48 * * * * - vsako uro 3min 18, 33 in 48minut se poveži na server in poglej ce je ura točna in ce je kaj za prenest
0 15 * * 5 - vsak petek ob 15:00 zvoni 14 Jezusovo trplenje
0 15 * * 6 - vsako soboto ob 15:00 zvoni 15 Delopust

Zdaj pa zares

CRONtab

* * * * *  python ~/vsakominuto.py          (premika uro, nastavi lokalne spremenljivke)
0,15,30,45 * * * *  python ~/zvonenje.py    (bije in zvoni na 15min)
8,23,38,53 * * * *  python ~/prenos.py      (4x na uro pogleda spremembe na serverju)
nastavitve.py
# nastavitve.py  - definira nastavitve hardware-a

bitje1 = 36    #pin 36 GPIO16
bitje2 = 38    #pin 38 GPIO20
bitje3 = 40    #pin 40 GPIO21
bitje_p = .5   # četrt bitje pavza .5s
bitje_i = .5   # četrt bitje impulz .5s
ure = 32       #pin 32 GPIO12
ure_p = 2.5    # ura bitje pavza 2.5s med udarci
ure_i = .5     # ura impulz 0.5s dolzina signala na izhodu
zvon1 = 29     #pin 29 GPIO5 - veliki zvon
zvon2 = 31     #pin 31 GPIO6 - zvon 2
zvon3 = 33     #pin 33 GPIO13 - zvon 3
zvon4 = 35     #pin 35 GPIO19 - zvon 4
zvon5 = 37     #pin 37 GPIO26 - mali zvon


stalno.py
#stalno.py - iz serverja nastavitve za stalno tedensko zvonenje
#stalno zvoni neodvisno tudi ce internet pade dol za recimo 1 mesec
#70700, 21 - 7=nedelja 07:00, 21=prvo delavnik,  (1=pon, 7=ned)

stalno = [70700, 21, 70745, 22, 70800, 23, 70900, 24, 70945, 25, 71000, 26, 71200, 12, 71800, 21, 71845, 22, 71900, 23, 10700, 11, 11200, 12, 11800, 21, 11845, 22, 11900, 23, 20700, 11, 21200, 12, 21800, 21, 21845, 22, 21900, 23, 30700, 11, 31200, 12, 31800, 21, 31845, 22, 31900, 23, 40700, 11, 41200, 12, 41800, 21, 41845, 22, 41900, 23, 50700, 11, 51200, 12, 51500, 14, 51800, 21, 51845, 22, 51900, 23, 60700, 11, 61200, 12, 61500, 15, 61800, 21, 61845, 22, 61900, 23 ]

tedensko.py
#tedensko.py - iz serverja nastavitve za tedenske/14dnevne spremembe zvonenja
#tedensko prenese spremembe zvonenj za 14dni - po prenosu lahko 14dni brez interneta, ce ni novih sprememb seveda
# 1909080900, 0 - 2019 09mes 08 09:00, 0=ukine stalno zvonenje, premaknjena masa

tedensko = [1909080900, 0, 1909080945, 0, 1909081000, 0, 1909101700, 21, 1909101745, 22, 1909101800, 23]

tipizvon.py
#tipizvon.py - Funkcija tipizvonenja(tip) ki jo klice glavni program

# Nastavimo zvonove, cass zvonenj, case pavz
# zvon1 = 10 off, 11 on recimo Veliki
# zvon2 = 20 off, 21 on recimo mali
# zvon3 = 30 off, 31 on
# zvon, pavza, zvon,...
#tip9 = [11, 60, 10, 30, 21, 60, 20, 0] #V1, 60s, V0, 30s, M1, 60s, M0 - veliki 60s, 30s pavza, mali 60s konc, moramo koncati z 0 da dobimo parno stevilo
#zamiki zacetka zvonenja, prim: tip9 = [11, 5, 21, 60, 10, 5, 20, 0]Veliki, 5s kasneje Mali, zvonita 60s, Veliki se ustavi in 5s za njim se Mali




def tipizvonenja(tip):
    import time


    #Studeno
    tip0 = [10, 0, 20, 0, 30, 0, 40, 0, 50, 0] #ustavi vse zvonove

    tip11 = [11, 90, 10, 0]                 #Jutranje 7:00
    tip12 = [11, 90, 10, 0]                 #opoldne
    tip13 = [11, 60, 10, 30, 21, 60, 20, 0] #večerno

    tip14 = [11, 90, 10, 0]                  #petek Jezusovo trplenje
    tip15 = [11, 60, 21, 90, 10, 0, 20, 0]   #sobota delopust
    tip16 = [11, 90, 21, 120, 20, 15, 10, 0] #praznik delopust

    tip21 = [11, 90, 10, 0]                # Maša prvo
    tip22 = [11, 3, 21, 120, 10, 3, 20, 0] # Maša 3/4
    tip23 = [11, 90, 10, 0]                # Maša zadnje

    tip24 = [11, 90, 10, 0]                # Ned. Maša prvo
    tip25 = [11, 3, 21, 120, 10, 3, 20, 0] # Ned. Maša 3/4
    tip26 = [11, 90, 10, 0]                # Ned. Maša zadnje

    tip27 = [11, 90, 10, 0]                # Praz. Maša prvo
    tip28 = [11, 3, 21, 120, 10, 3, 20, 0] # Praz. Maša 3/4
    tip29 = [11, 90, 10, 0]                # Praz. Maša zadnje

    #...

    tip41 = [21, 60, 20, 0]                                 #mrlisko naznanitev -otrok
    tip42 = [21, 60, 20, 30, 21, 60, 20, 0]                 #mrlisko naznanitev -zenska
    tip43 = [21, 60, 20, 30, 21, 60, 20, 30, 21, 60, 20, 0] #mrlisko naznanitev -moski
    tip44 = [11, 60, 10, 30, 11, 60, 10, 30, 11, 60, 10, 0] #mrlisko naznanitev -duhovnik

    tip45 = [11, 90, 10, 30, 21, 90, 20, 0]                 #mrlisko Jutranje 7:00
    tip46 = [11, 90, 10, 30, 21, 90, 20, 0]                 #mrlisko opoldne
    tip47 = [21, 90, 20, 30, 11, 60, 10, 30, 21, 60, 20, 0] #mrlisko večerno

    tip51 = [11, 0, 21, 60, 10, 0, 20, 30, 11, 0, 21, 60, 10, 0, 20, 30, 11, 0, 21, 60, 10, 0, 20, 0] #vsi sveti 3x oba 60s in 30s pavza

    #interno zvonenje prozenje z gumbom, daljincem ali aplikacijo
    tip61 = [11, 90, 10]                  #povzdigovanje
    tip62 = [11, 0, 21, 60, 10, 0, 20, 0] #zahvalna
    tip63 = [11, 0, 21, 90, 10, 0, 20, 0] #zahvalna2 vel.cetr.

    #mrliski sprevod timer
    tip71 = [21, 60, 20, 0]  #mrlisko 60s
    tip72 = [21, 90, 20, 0]  #mrlisko 90s
    tip73 = [21, 120, 20, 0] #mrlisko 120s
    tip74 = [21, 150, 20, 0] #mrlisko 150s
    tip75 = [21, 180, 20, 0] #mrlisko 3m
    tip75 = [21, 240, 20, 0] #mrlisko 4m
    tip79 = [10, 0, 20, 0, 30, 0, 40, 0, 50, 0] #ustavi vse zvonove



    #tip = 28 #test
    tipstr = "tip"+str(tip)  #naredi ime Arraya tip28
    tipx =(vars()[tipstr])   #prepise tip28 v tipx
    i = len(tipx)            #pogleda stevilo elementov
    print(tipx)
    print(i)
    k = 0
    while k < i:             #bere pare spremenljivk
      zvon = tipx[k]         #zvon - kateri zvon
      cas = tipx[k+1]        #cas - pavza do naslednjega dogodka
      print ("zvon", zvon)
      print ("sekunde", cas)
      time.sleep(cas/4)      #!!!POPRAVI cas/4 - za testiranje 4x hitreje
      k += 2



zvonenje.py
Ko ga CRON sproži najprej naredi spremenljivke iz datuma in casa - recimo 17/9/2019 18:45

import sys
import time
import tipizvon

from nastavitve import *
from stalno import stalno
from tedensko import tedensko
from datetime import datetime


now = datetime.now()                     # test   - 17/9/2019 18:45
datum = int(now.strftime("%y%m%d%H%M"))  # 1909171845
dan = int(now.strftime("%w"))            # 2      - torek
if dan == 0:
   dan = 7
stalni = int(now.strftime("%w%H%M"))     # 21845  - torek 18:45
minute = int(now.strftime("%M"))         # 45     - tričetrt
ura = int(now.strftime("%I"))            # 6      - ura na 12h

#testiranje   - 17/9/2019 18:45
datum = 1909171844   # daj na 44 - 1909171844 da gre na stalno
#dan = 2
stalni = 70900       # daj na 44 - 21844 da preskoci stalno
minute = 45          # test bitja 0, 15, 30, 45
#ura = 6


print('test ura = ', datum)
print(' ')
print('------------ BITJE --------------')
print('Bitje ure', minute, 'min')

if minute == 15:
  mali = 1
  veliki = 0
elif minute == 30:
  mali = 2
  veliki = 0
elif minute == 45:
  mali = 3
  veliki = 0
elif minute == 0:
  mali = 4
  veliki = ura

print('cetrt', mali)
print('ura', veliki)

##GPIO.output(bitje1, true)
##time.sleep(bitje_p)
##GPIO.output(bitje1, false)


while mali > 0:
  print('cetrt', mali)
  print('bitje1 - 1')
  time.sleep(bitje_p)
  print('bitje1 - 0')
  print('bitje2 - 1')
  time.sleep(bitje_p)
  print('bitje2 - 0')
  print('bitje3 - 1')
  time.sleep(bitje_p)
  print('bitje3 - 0')
  time.sleep(2)
  mali -= 1

while veliki > 0:
  time.sleep(ure_p)
  print('ura', veliki)
  print('Ura - 1')
  time.sleep(ure_i)
  print('Ura - 0')
  veliki -= 1

# BITJE URE bo verjetno treba narest tukaj
# da ne bo zvonilo takoj ko zacne biti
# zvonenje pa lahko s funkcijo
print(' ')
time.sleep(2.5)
print('------------ ZVONENJE --------------')

try:
   pozt = tedensko.index(datum)
   #print(pozt)
   zvot = tedensko[pozt+1]
   print('tedensko zvonenje', tedensko[pozt], 'tip ', zvot)
   tipizvon.tipizvonenja(zvot)
   #sys.exit()
except ValueError:
  print('ni tedenskega zvonenja - preveri stalno')

  try:
   pozs = stalno.index(stalni)
   #print(pozs)
   zvos = stalno[pozs+1]
   print('stalno zvonenje', stalno[pozs], 'tip ', zvos)
   tipizvon.tipizvonenja(zvos)
  except ValueError:
   print('ni stalnega zvonenja - zakljuci')


time.sleep(2.5)
print(' ')
print(' ------------------------------------------------------ ')
print(' ')
print('------------ izpis spremenljivk ------------')
print(now)
print(datum)
print(dan)
print(minute)
print(ura)
print(tedensko)
print(stalno)