# @name NimbusPT # @desc Relógio com calendário, tempo, qualidade do ar PM2.5 e valores do quarto # @author AkdM / olo81 # @version 2.11.0 # @display 52x16 # @config sweep bool "Efeito limpa-para-brisas (a cada 5 min)" default=true group="Ecrã" help="Uma barra preta de limpeza percorre a matriz da direita para a esquerda a cada 5 minutos" # @config t24 bool "Relógio de 24 horas" default=true group="Hora" # @config tlz bool "Zero à esquerda" default=true group="Hora" # @config tsep select "Dois pontos" options=steady,blink,pulse default=pulse group="Hora" # @config tcol color "Cor da hora" default=#FFFFFF group="Hora" # @config face select "Mostrador do relógio" options=sheet,ring,big,daylight default=sheet group="Hora" # @config chc color "Cor do cabeçalho" default=#FF0000 group="Calendário" # @config ctc color "Cor do texto" default=#000000 group="Calendário" # @config cbc color "Cor de fundo" default=#FFFFFF group="Calendário" # @config canim bool "Animação do calendário" default=true group="Calendário" help="A folha é arrancada quando o relógio aparece e à meia-noite" # @config dfmt select "Formato da data" options=dd.mm.yy,mm/dd/yy,yy-mm-dd default=dd.mm.yy group="Calendário" help="Para o mostrador grande" # @config wbar bool "Barra semanal" default=true group="Barra semanal" # @config wmon bool "Semana começa na segunda" default=true group="Barra semanal" # @config wtd color "Hoje" default=#FFFFFF group="Barra semanal" # @config wod color "Outros dias úteis" default=#666666 group="Barra semanal" # @config wtw color "Hoje no fim de semana" default=#FFFFFF group="Barra semanal" # @config wow color "Outros dias de fim de semana" default=#666666 group="Barra semanal" # @config wpan bool "1. Tempo" default=true group="Carrossel" help="Número 1 no campo de ordem" # @config wind bool "2. Rajadas de vento" default=true group="Carrossel" help="Número 2 no campo de ordem; aparece quando as rajadas ultrapassam o limiar" # @config dpan bool "3. Data" default=true group="Carrossel" help="Número 3 no campo de ordem" # @config tpan bool "4. Temperatura" default=true group="Carrossel" help="Número 4 no campo de ordem" # @config showpm bool "5. PM2.5" default=true group="Carrossel" help="Número 5 no campo de ordem" # @config rpan bool "6. Temperatura do quarto" default=true group="Carrossel" help="Número 6 no campo de ordem" # @config hpan bool "7. Humidade do quarto" default=true group="Carrossel" help="Número 7 no campo de ordem" # @config moon bool "8. Fase da lua" default=true group="Carrossel" help="Número 8 no campo de ordem" # @config ppan bool "10. Pressão" default=true group="Carrossel" help="Número 10 no campo de ordem" # @config dlpan bool "11. Duração do dia" default=true group="Carrossel" help="Número 11 no campo de ordem" # @config dldur slider "Duração do painel do dia" default=5 min=1 max=60 unit=s group="Carrossel" help="Por quanto tempo o painel de duração do dia é mostrado" # @config meteoalarm_enabled bool "9. Meteoalarm" default=false group="Carrossel" help="Número 9 no campo de ordem" # @config order text "Ordem (números)" default="" group="Carrossel" help="Números dos painéis por vírgulas, ex.: 1,2,3,4,5,6,7,8,9,10,11. Vazio = ordem predefinida" # @config ddur slider "Duração da data" default=10 min=1 max=60 unit=s group="Carrossel" # @config pdur slider "Duração dos outros painéis" default=3 min=1 max=60 unit=s group="Carrossel" # @config wdur slider "Duração do painel do tempo" default=10 min=1 max=60 unit=s group="Carrossel" help="Mais tempo para ler a descrição deslizante do tempo sob o ícone" # @config wthr slider "Limiar de rajadas de vento" default=40 min=10 max=100 unit=km/h group="Carrossel" help="O painel de vento aparece quando as rajadas ultrapassam este limiar" # @config pmthr slider "Limiar de PM2.5" default=30 min=1 max=100 unit=ug/m3 group="Carrossel" help="O painel PM2.5 aparece quando a concentração ultrapassa este limiar" # @config tran select "Transição" options=wipe,fade,morph,down,up,left,right,none default=wipe group="Carrossel" # @config lat number "Latitude" default=48.8566 min=-90 max=90 step=0.0001 group="Tempo e Ar" # @config lon number "Longitude" default=2.3522 min=-180 max=180 step=0.0001 group="Tempo e Ar" # @config wref number "Atualização" default=15 min=5 max=120 unit=min group="Tempo e Ar" # @config wtext text "Descrições próprias" default="" group="Tempo e Ar" help="Mostrador grande. Até 24 descrições próprias, separadas por vírgulas" # @config ttopic text "MQTT: Temperatura exterior" default="" group="Tempo e Ar" help="Substitui o Open-Meteo/Airly. Vazio = automático" # @config pmtopic text "MQTT: PM2.5" default="" group="Tempo e Ar" help="Substitui o Open-Meteo/Airly. Vazio = automático" # @config airlykey text "Chave API da Airly" default="" group="Tempo e Ar" help="Opcional. Se indicada, temperatura e PM2.5 vêm da Airly em vez do Open-Meteo" # @config airlyref slider "Atualização da Airly" default=15 min=5 max=120 unit=min group="Tempo e Ar" help="Com que frequência obter dados da Airly. 15 min é o ideal para uma conta gratuita" # @config maref number "Atualização do Meteoalarm" default=10 min=5 max=120 unit=min group="Tempo e Ar" help="Com que frequência obter o alerta IMGW" # @config madur slider "Duração da mensagem" default=15 min=5 max=120 unit=s group="Tempo e Ar" help="Quanto tempo a mensagem do Meteoalarm é mostrada" # @config mafreq slider "Frequência durante o alerta" default=10 min=1 max=240 unit=min group="Tempo e Ar" help="Com que frequência mostrar a mensagem durante o alerta" # @config mafreqb slider "Frequência antes do alerta" default=60 min=1 max=240 unit=min group="Tempo e Ar" help="Com que frequência mostrar a mensagem antes do início" # @config rtopic text "MQTT: Temperatura do quarto" default="" group="Quarto" help="No broker das definições do AWTRIX. Vazio usa o sensor do relógio" # @config htopic text "MQTT: Humidade" default="" group="Quarto" help="No broker das definições do AWTRIX. Vazio usa o sensor do relógio" # @config rcol color "Cor da temperatura do quarto" default=#FFFFFF group="Quarto" # @config hcol color "Cor da humidade" default=#00AAFF group="Quarto" # @config night bool "Modo noturno" default=false group="Modo noturno" # @config nauto bool "Modo noturno automático" default=false group="Modo noturno" help="Entre as horas abaixo" # @config nfrom number "Da hora" default=22 min=0 max=23 unit=h group="Modo noturno" # @config nto number "Até à hora" default=7 min=0 max=23 unit=h group="Modo noturno" # @config nbar bool "Barra semanal à noite" default=true group="Modo noturno" # @config npause bool "Pausar a rotação à noite" default=false group="Modo noturno" # @config nbri number "Brilho noturno" default=0 min=0 max=255 group="Modo noturno" help="0 mantém o brilho do dispositivo; outro valor define o brilho noturno" # @config ntopic text "Tópico MQTT do modo noturno" default="" group="Modo noturno" help="Payload: on/off, true/false ou 1/0" import math import string class NimbusPL var asw,aswt,au,av,bg,T,n,F,aw,U,w,ax,ay,az,aA,aB var aC,aD,aE,wd,aF,aG,aH,aI,aJ,aK,aL,V var e,W,X,Y,Z var a,f,G,H,I,aa,aa6,aM,ab,ac var ad,aN,aO,aP,aQ,aR,aS,aT,J,ae,af,K,ag,ah var ai,aU,aV,aW,aj,aX,x,ak var al var o var c,L,d,y,M,N var i,t,aY,z,u,am,j,an,O,aZ,A,P,ao var a0,a1,a2,a3,B,Q,p,pm1,pm2,pmQ var q,C,ba,ap,k,D,R var r,aq,ar,ma1,maQ,maB,ma_enabled,ma_ref_rate,maText,maLvl,maCol,mc,maFrom,maTo,maMsg,maNext,maUntil,maDur,maFreq,maFreqB,mao,wao,maTeryt,moon_on,moonp,mo,mos,wind_on,wthr,w8prev var pmthr,p5prev,fg,fgh,showpm,pl,tmq,pmq,airt,airp,air1,airlykey,airQ,airB,air_ref,dl_on,dld,prh def init()self.asw=store.get("sweep",true)self.aswt=0 self.au=store.get("t24")self.av=store.get( "tlz")self.T=["stały","mrugający","pulsowanie"].find(store.get("tsep"))if self.T==nil self.T=["steady","blink","pulse"].find(store.get("tsep"))end self.n=store.get("tcol")self.F=store.get("chc")self.aw=store.get("ctc")self.U=store.get("cbc")self.w=store.get("wbar")self.ax=store.get( "wmon")self.ay=store.get("wtd")self.az=store.get("wod")self.aA=store.get("wtw")self.aB=store.get("wow")self.aC=["przetarcie","zanikanie","przejście","dół","góra","lewo","prawo","brak"].find(store.get("tran"))if self.aC==nil self.aC=["wipe","fade","morph","down","up","left","right","none"].find(store.get("tran"))end self.aD= store.get("ddur")self.aE=store.get("pdur")var wd0=store.get("wdur")self.wd=wd0==nil?10:wd0 self.aF=store.get("rcol")self.aG=store.get("hcol")self.aH=store.get("nauto")self.aI=store.get("nfrom")self.aJ=store.get("nto")self.aK=store.get("nbar")self.aL =store.get("npause")self.V=store.get("nbri")self.e=["kartka","pierścień","duży","długośćdnia"].find(store.get("face"))if self.e==nil self.e=["sheet","ring","big","daylight"].find(store.get("face"))end if self.e==nil self.e=["kartka","pierścień","duży","długość dnia"].find(store.get("face"))end if self.e==nil||self.e>3 self.e=0 end self.W=store.get("canim")self.X=["dd.mm.yy","mm/dd/yy","yy-mm-dd"].find(store.get("dfmt"))self.Y =self.b(self.n,0.18)self.Z=self.b(self.n,0.28)self.al=[0,0,0,0,0,0,0]self.ad=-1 self.ma_enabled=store.get("meteoalarm_enabled",false)self.moon_on=store.get("moon",true)self.wind_on=store.get("wind",true)self.wthr=store.get("wthr",40)self.pmthr=store.get("pmthr",30)self.dl_on=store.get("dlpan",true)self.dld=store.get("dldur",5)self.prh=[]self.mo=nil self.mos=nil self.moonp=0 self.c=[]var pmOn=store.get("showpm",true)self.showpm=pmOn var used=[false,false,false,false,false,false,false,false,false,false,false]var ordv=store.get("order")if ordv!=nil for t:re.matchall("[0-9]+",ordv)var n=int(t)var a=nil if n==1&&store.get("wpan",true)a=2 elif n==2&&self.wind_on a=8 elif n==3&&store.get("dpan",true)a=0 elif n==4&&store.get("tpan",true)a=1 elif n==5&&pmOn a=5 elif n==6&&store.get("rpan",true)a=3 elif n==7&&store.get("hpan",true)a=4 elif n==8&&self.moon_on a=7 elif n==9&&self.ma_enabled a=6 elif n==10&&store.get("ppan",true)a=9 elif n==11&&self.dl_on a=10 end if a!=nil&&n>=1&&n<=11&&!used[n-1]self.c.push(a)used[n-1]=true end end end var n2=1 while n2<=11 if!used[n2-1]var a=nil if n2==1&&store.get("wpan",true)a=2 elif n2==2 a=nil elif n2==3&&store.get("dpan",true)a=0 elif n2==4&&store.get("tpan",true)a=1 elif n2==5&&pmOn a=5 elif n2==6&&store.get("rpan",true)a=3 elif n2==7&&store.get("hpan",true)a=4 elif n2==8&&self.moon_on a=7 elif n2==9&&self.ma_enabled a=6 elif n2==10&&store.get("ppan",true)a=9 elif n2==11&&self.dl_on a=10 end if a!=nil self.c.push(a)end end n2+=1 end if self.wind_on var wi8=self.c.find(8)if wi8==nil var wi2=self.c.find(2)self.c.insert(wi2==nil?0:wi2+1,8)end end if size(self.c)==0 self.c.push(0)end self.L=-1 self.d=-1 self.M=0 self.i=[nil,nil,nil,nil,nil,nil,nil,nil,nil,nil]self.t=[nil,nil,nil,nil,nil,nil,nil]self.aY=[0,0,0,0,0,0,0]self.z=[0,0,0,0,0,0,0] self.u=[0,0,0,0,0,0,0]self.am=[nil,nil,nil,nil,nil,nil,nil]self.j=true self.an=0 self.ao={"mode":"bounce","speed":40}self.wao={"mode":"loop","speed":40,"direction":"left","gap":28}self.mao={"mode":"loop","speed":40,"direction":"left","gap":10}var rf=store.get("maref")self.ma_ref_rate=(rf==nil?10:rf)*60 var md=store.get("madur")self.maDur=(md==nil?15:md)*1000 var mf=store.get("mafreq")self.maFreq=(mf==nil?10:mf)*60 var mb=store.get("mafreqb")self.maFreqB=(mb==nil?60:mb)*60 self.maTeryt="" self.ma1="https://danepubliczne.imgw.pl/api/data/warningsmeteo"self.maQ=false self.maB=0 self.maText=nil self.maLvl=1 self.maCol=0xFFC800 self.maFrom="" self.maTo="" self.maMsg="" self.maNext=0 self.maUntil=0 self.a0=self.c.find(1)!=nil||self.c.find(2)!=nil||self.c.find(5)!=nil||self.wind_on||self.c.find(9)!=nil||self.c.find(10)!=nil self.a1= "http://api.open-meteo.com/v1/forecast?latitude="+str(store.get("lat"))+"&longitude="+str(store.get("lon"))+"¤t=temperature_2m,weather_code,is_day,wind_gusts_10m,pressure_msl&daily=sunrise,sunset&forecast_days=1&timezone=auto"self.pm1= "http://air-quality-api.open-meteo.com/v1/air-quality?latitude="+str(store.get("lat"))+"&longitude="+str(store.get("lon"))+"¤t=pm2_5"self.a2={"find":'"current":{','keep':700}self.pm2={"find":'"current":{','keep':200}var ak=store.get("airlykey")self.airlykey=ak==nil?"":ak var ar=store.get("airlyref")self.air_ref=(ar==nil?15:ar)*60 self.airB=0 self.airQ=false self.air1=self.airlykey==""?"":"https://api.airly.eu/v2/measurements/point?lat="+str(store.get("lat"))+"&lng="+str(store.get("lon"))+"&apikey="+self.airlykey self.a3=store.get("wref")*60 self.B=0 self.Q=false self.pmQ=false var d=store.get("rtopic")self.A=size(d)==0 if!self.A&&self.c.find(3)!=nil mqtt.subscribe(d,/l,f->self.at(3,f))end d=store.get("htopic")self.P=size(d)==0 if!self.P&&self.c.find(4)!=nil mqtt.subscribe(d,/l,f->self.at(4,f))end d=store.get("ttopic")if size(d)>0 mqtt.subscribe(d,/l,f->self.at(1,f))end d=store.get("pmtopic")if size(d)>0 mqtt.subscribe(d,/l,f->self.at(5,f))end self.aZ=(self.A&&self.c.find(3)!=nil)||(self.P&&self.c.find(4)!=nil)self.q=[0xFFC800,0xFF7800,0xFFFFFF,0xB4B4B4,0x6E6E6E,0x3C3C3C ,0xF0DC8C,0,0,0]var m="YOWLGDMrS#"var u="0123456789-?%"var g=["...rr/.r....r/..OYYO/r.YYYY.r/r.YYYY.r/..OYYO/.r....r/...rr","..MM/.MM...S/MMM/MMM/MMM/MMMM/.MMMMMM/..MMM", "...Y..Y/.Y..OYO/...OYYYO/..LLYYYY/.LWWLLYO/LWWWWWL/WWWWWWWL/GLLLLLG","....GG/..GGGGG/.LLGGGGG/LWWLGGGG/WWWWLGGG/WWWWWWL/GLLLLLG","/.LLLLLL//GGGG.GGG//.LLLLLL//GG.GGGG", "/LLLLLL//.GGGG.GG//..LLLLLL//GG.GG","...LL/.LLWWL/LLWWWWL/LWWWWWWL/GLLLLLLG","...GG/.GGLLGG/GLLLLLLG/DGGGGGGD",".....YY/....YY/...YYYY/....YY/...YY","###/#.#/#.#/#.#/###",".#/##/.#/.#/###", "###/..#/###/#/###","###/..#/###/..#/###","#.#/#.#/###/..#/..#","###/#/###/..#/###","###/#/###/#.#/###","###/..#/..#/..#/..#","###/#.#/###/#.#/###","###/#.#/###/..#/###","//###","###/..#/.#//.#", "#.#/..#/.#/#/#.#"]self.q.push(0x2890FF)self.q.push(0xFF3030)m+="BR"g=g+["r.r.r/.YYY/rYYYr/.YYY/r.r.r",".MMM/MM..S/MM/MM/.MMM","....YYY/..LLYYY/.LWWLY/LWWWWL/.LLLL", "..LLL/.LWWWL/LWWWWWL/LWWWWWL/.LLLLL","LLLLLL//.GGGGGG//LLLLLL",".LLL/LWWWL/LLLLL/B.B.B/.B.B",".LLL/LWWWL/LLLLL/W.W.W/.W.W",".GGGG/GDDDDG/GGYYG/..Y/.Y",".L/.L/.R/RRR/RRR","..O/.OOO/OOOOO/.WWW/.W.W", "..B/.BBB/BWBBB/BBBBB/.BBB",".MMM/MMMMM/M.S.M/M.S.M/MMMMM"]self.C=[]self.ba={}var a=0 while a=0 h.add( j,1)h.add(o,1)h.add(q,1)end j+=1 end k+=1 end if a<9||a>=22 self.C.push(h)end a+=1 end self.fg=[]var fga=[".WW./.RR./W.R.W/.RR./.RR./W.R.W",".WW./.RR./.RRW/.RR./.RR./.W.W.",".WW./W.R.W/.RR./.RR./..R../..W..",".WW./.R.W/..RR/..RR/..R../.W...","W...W/W...W/RRRRR/RRRRR",".WW./.RR./.RR./..R../W..W."]var fa2=0 while fa2<6 var fg2=fga[fa2] var fh2=bytes() var fj=0 var fo=0 var fk=0 while fk=0 fh2.add(fj,1)fh2.add(fo,1)fh2.add(fq2,1) end fj+=1 end fk+=1 end self.fg.push(fh2) fa2+=1 end self.fgh=[6,6,6,6,4,5]self.ap=bytes("010004010602010003020601")self.R=bytes()var e=224 a=0 while a<256 e=(e*75+74)%65537 self.R.add(e% 100,1)a+=1 end while a<832 e=(e*75+74)%65537 self.R.add(e%100,1)a+=1 end self.a={}a=0 while a<13 self.a[u[a]]=self.v(g[9+a])a+=1 end var v=["##/#.#/###/#.#/#.#","##/#.#/##/#.#/##",".#/#.#/#/#.#/.#", "##/#.#/#.#/#.#/##","###/#/###/#/###","###/#/###/#/#",".##/#/#.#/#.#/.##","#.#/#.#/###/#.#/#.#","#/#/#/#/#","..#/..#/..#/#.#/.#","#.#/#.#/##/#.#/#.#","#/#/#/#/###","#...#/##.##/#.#.#/#...#/#...#", "#..#/##.#/#.##/#..#/#..#",".#/#.#/#.#/#.#/.#","###/#.#/##/#/#",".#/#.#/#.#/#.#/.###","###/#.#/##/#.#/#.#","###/#/###/..#/###","###/.#/.#/.#/.#","#.#/#.#/#.#/#.#/###","#.#/#.#/#.#/#.#/.#", "#...#/#...#/#...#/#.#.#/.#.#","#.#/#.#/.#/#.#/#.#","#.#/#.#/###/..#/##","###/..#/.#/#/###"]a=0 while a<26 self.a["ABCDEFGHIJKLMNOPQRSTUVWXYZ"[a]]=self.v(v[a])a+=1 end self.a[":"]=self.v("/#//#")self. a["."]=self.v("////#")self.a["/"]=self.v("..#/..#/.#/#/#")self.a["h"]=self.v("#.#/#.#/###/#.#/#.#")self.a["a"]=self.v(".#/#.#/###/#.#/#.#")self.pl={}self.pl["Ą"]=self.v("./##./#.#/###/#.#/##.#")self.pl["Ć"]=self.v(".#/.#/#.#/#/#.#/.#")self.pl["Ę"]=self.v("./###/#/###/#/###.#")self.pl["Ł"]=self.v("./#./#./##./#./###")self.pl["Ń"]=self.v(".#/##./#.#/#.#/#.#/#.#")self.pl["Ó"]=self.v(".#/.#/#.#/#.#/#.#/.#")self.pl["Ś"]=self.v(".#/.##/#../.#./..#/##.")self.pl["Ź"]=self.v(".#/###/..#/.#./#../###")self.pl["Ż"]=self.v(".#./###/..#/.#./#../###")var w=["#####/#...#/#...#/#...#/#...#/#...#/#####","..#/.##/..#/..#/..#/..#/#####","#####/....#/....#/#####/#/#/#####", "#####/....#/....#/#####/....#/....#/#####","#...#/#...#/#...#/#####/....#/....#/....#","#####/#/#/#####/....#/....#/#####","#####/#/#/#####/#...#/#...#/#####", "#####/....#/....#/....#/....#/....#/....#","#####/#...#/#...#/#####/#...#/#...#/#####","#####/#...#/#...#/#####/....#/....#/#####","///#####","/##/##//##/##"]self.f={}a=0 while a<12 self.f[ "0123456789-:"[a]]=self.v(w[a])a+=1 end self.G=bytes("00000101020203030404")self.H=bytes("00000102030304050606")self.aa="DOMSEGTERQUAQUISEXSAB"self.aa6=["DOM","SEG","TER","QUA","QUI","SEX","SAB"]self.aM="JANFEVMARABRMAIJUNJULAGOSETOUTNOVDEZ"var c=["LIMPO","QUASE LIMPO","NUBLADO","ENCOBERTO","NEVOEIRO","SINCELO","GAROA","GAROA FORTE","GAROA GELADA","GAROA GELADA FORTE","CHUVA","CHUVA FORTE","CHUVA CONGELANTE","CHUVA CONGELANTE FORTE","NEVE","NEVASCA","GRANIZO MIÚDO","AGUACEIROS","AGUACEIROS FORTES","AGUACEIROS DE NEVE","AGUACEIROS DE NEVE FORTES","TROVOADA","TORMENTA DE GRANIZO","TROVOADA COM GRANIZO FORTE"]var s=string.split(store.get("wtext"),",")a=0 while a0&&b[0]==" "b=b[1 ..]end while size(b)>0&&b[size(b)-1]==" "b=b[0 ..size(b)-2]end if size(b)>0 c[a]=b end a+=1 end self.ab=[c[0],"NOITE LIMPA",c[1],c[2],c[3],c[4],c[5],c[6],c[7],c[8],c[9],c[10],c[11],c[12],c[13],c[14],c[15],c[16],c[17],c[18],c[19],c[20],c[21],c[22],c[23]]self.ac=[]for x:self.ab self.ac.push(51-text_ink_width( x))end var i=store.get("night")if i!=store.get("nset")store.set("nset",i)store.set("nstate",i)end self.aq=store.get("nstate",i)self.ar=true d=store.get("ntopic")if size(d)>0 mqtt.subscribe(d,/l,f-> self.at(0,f))end end def loop()if self.maText!=nil var ns=self.mts()if self.maTo!=""&&ns>=self.maTo self.maText=nil self.maMsg="" self.maUntil=0 self.maNext=0 else var nw=now_ms()if self.maNext==0||nw>=self.maNext self.maUntil=nw+self.maDur self.maNext=nw+((self.maFrom==""||ns>=self.maFrom)?self.maFreq*1000:self.maFreqB*1000)self.M=0 end end end if self.d==6&&(self.maText==nil||now_ms()>=self.maUntil)self.M=0 end self.M-=1 if self.M<=0 var msg=self.maText!=nil&&self.maUntil>0&&now_ms()=0 self.N=now_ms()end self.y=self.d self.d=a end self.M=a==0?self.aD:(a==2?self.wd:(a==10?self.dld:self.aE)) end self.B-=1 self.maB-=1 if self.a0&&self.B<=0&&!self.Q&&!self.pmQ self.Q=true self.pmQ=true self.B=60 http.get(self.a1,/o,c->self.bb(o,c),self.a2) http.get(self.pm1,/o,c->self.pmb(o,c),self.pm2) end if self.ma_enabled && self.maB <= 0 && !self.maQ self.maQ = true self.maB = self.ma_ref_rate http.get(self.ma1,/o,c->self.ma_cb(o,c)) end self.airB-=1 if self.airlykey != "" && self.airB <= 0 && !self.airQ self.airQ = true self.airB = self.air_ref http.get(self.air1,/o,c->self.air_cb(o,c)) end self.an+=1 if self.aZ&&self.an%10==1 if self.A var b=sensor.temperature()if b!=self.i[3]self.i[3]=b self.j=true end end if self.P var b= sensor.humidity()if b!=self.i[4]self.i[4]=b self.j=true end end end var n=settings.get("useCelsius")if n!=self.O self.O=n self.j=true end if self.j self.j=false var a=1 while a<7 if a!=2 var b=self.i[ a]var c=nil var j=a==3?self.aF:(a==4?self.aG:0xFFFFFF)if a==1 if b==nil c="--"j=0x666666 else var d=clamp(round(b),10,30)j=hsv(d<20?200-(d-10)*17:30-(d-20)*3,100,100)if!self.O b=b*1.8+32 end end elif a==5 if b==nil c="--"j=0x666666 else var pmv=round(b)j=pmv<=12?0x00FF00:(pmv<=35?0xFFFF00:(pmv<=55?0xFF7800:(pmv<=90?0xFF0000:(pmv<=150?0xC24CFF:0x0033AA))))end elif b!=nil&&a==3&& self.A&&!self.O b=b*1.8+32 end if b!=nil&&a!=5&&a!=6 c=str(round(b))+(a==4?"%":"")elif b!=nil&&(a==5||a==6)c=str(round(b))end self.t[a]=c if c!=nil self.bc(a,c)self.u[a]=j self.am[a]=a==4?c:(a==5||a==6?c:c+"°")end end a+=1 end if self.wind_on var wk=self.i[6]!=nil&&self.i[6]>self.wthr var wi8=self.c.find(8)if wk&&wi8==nil if self.w8prev==nil self.c.insert(0,8)else var wi=self.c.find(self.w8prev)self.c.insert(wi==nil?0:wi+1,8)end end if!wk&&wi8!=nil self.c.remove(wi8)end if size(self.c)==0 self.c.push(0)end end if self.showpm var pk=self.i[5]!=nil&&self.i[5]>=self.pmthr var pi5=self.c.find(5)if pk&&pi5==nil if self.p5prev==nil self.c.insert(0,5)else var pi2=self.c.find(self.p5prev)self.c.insert(pi2==nil?0:pi2+1,5)end end if!pk&&pi5!=nil self.c.remove(pi5)end if size(self.c)==0 self.c.push(0)end end end var e=hour()var k=self.aI var d=self .aJ var g=self.aq||self.aH&&e>=0&&(k>d?e>=k||e=k&&e0 if!store.get("nbsave",false)store.set("nbsave",[settings.get("autoBrightness"),settings.get("brightness")])end settings.set("autoBrightness",false)settings.set( "brightness",self.V)end else var l=store.get("nbsave",false)if l settings.set("autoBrightness",l[0])settings.set("brightness",l[1])store.set("nbsave",false)end end end end def bb(c,g)self.Q=false if g !=200||c==nil return end var d=re.search('temperature_2m":([-0-9.]+)',c)var e=re.search('weather_code":([0-9]+)',c)var f=re.search('is_day":([0-9])',c)if d==nil||e==nil return end var b=int(e[1]) var a=0 if b==0 a=(f!=nil&&f[1]=="0")?1:0 elif b==1 a=2 elif b==2 a=3 elif b==3 a=4 elif b==45 a=5 elif b==48 a=6 elif b==51||b==53 a=7 elif b==55 a=8 elif b==56 a=9 elif b==57 a=10 elif b==61||b==63 a=11 elif b==65 a=12 elif b==66 a=13 elif b==67 a=14 elif b==71||b==73 a=15 elif b==75 a=16 elif b==77 a=17 elif b==80||b==81 a=18 elif b==82 a=19 elif b==85 a=20 elif b==86 a=21 elif b==95 a=22 elif b==96 a=23 elif b==99 a=24 end self.p=a if !self.tmq&&!self.airt self.i[1]=num(d[1])end var wg=re.search('wind_gusts_10m":([-0-9.]+)',c)if wg!=nil self.i[6]=num(wg[1])end var pr=re.search('pressure_msl":([-0-9.]+)',c)if pr!=nil self.i[9]=num(pr[1])self.prh.push([now_ms()/1000,num(pr[1])])var kp=0 while kp86400 self.prh.remove(kp)else kp+=1 end end end var p1=string.find(c,'"sunrise":["')if p1>=0 var p2=string.find(c,'"',p1+12)if p2>=0 self.i[7]=self.tmin(c[p1+12..p2-1])end end var p3=string.find(c,'"sunset":["')if p3>=0 var p4=string.find(c,'"',p3+11)if p4>=0 self.i[8]=self.tmin(c[p3+11..p4-1])end end self.B=self.a3 self .j=true end def pmb(c,g)self.pmQ=false if g!=200||c==nil return end var d=re.search('pm2_5":([-0-9.]+)',c)if d==nil return end if !self.pmq&&!self.airp self.i[5]=num(d[1])self.j=true end end def air_cb(c,g) self.airQ=false if g!=200||c==nil return end var t=re.search('TEMPERATURE","value":([-0-9.]+)',c) var p=re.search('PM25","value":([-0-9.]+)',c) if t!=nil&&!self.tmq self.i[1]=num(t[1])self.airt=true end if p!=nil&&!self.pmq self.i[5]=num(p[1])self.airp=true end self.j=true end def ma_cb(c,g) self.maQ=false if g!=200 return end if c==nil self.maText=nil return end var p=string.split(c,'{"id":"') var best=nil var bl=0 var bo="" var bx="" var i=1 while i=0&&(self.maTeryt==""||string.find(r[tp..],'"'+self.maTeryt)>=0) var nm=re.search('"nazwa_zdarzenia":"([^"]+)"',r) var st=re.search('"stopien":"([0-9])"',r) if nm!=nil var lv=st==nil?1:int(st[1]) if lv>bl best=nm[1] bl=lv var fo=re.search('"obowiazuje_od":"([^"]+)"',r) var fd=re.search('"obowiazuje_do":"([^"]+)"',r) bo=fo==nil?"":fo[1] bx=fd==nil?"":fd[1] end end end i+=1 end if best==nil self.maText=nil self.maMsg="" self.maUntil=0 self.maNext=0 return end var nn=self.mdec(best)var tt="" if size(bo)>=16&&size(bx)>=16&&bo[10]==" " var fh=bo[11..15]var th=bx[11..15] var fdt=bo[8..9]+"."+bo[5..6]var tdt=bx[8..9]+"."+bx[5..6] tt=fdt==tdt?fh+"-"+th:fdt+" "+fh+"-"+tdt+" "+th end if nn!=self.maText self.maNext=0 self.maUntil=0 end self.maText=nn self.maFrom=bo self.maTo=bx self.maMsg=tt==""?nn:nn+" "+tt self.maLvl=bl self.maCol=bl>=3?0xFF0000:(bl==2?0xFF7800:0xFFC800)self.j=true end def mdec(s) s=string.replace(s,"\\u0105","ą")s=string.replace(s,"\\u0107","ć")s=string.replace(s,"\\u0119","ę")s=string.replace(s,"\\u0142","ł")s=string.replace(s,"\\u0144","ń")s=string.replace(s,"\\u00f3","ó")s=string.replace(s,"\\u015b","ś")s=string.replace(s,"\\u017a","ź")s=string.replace(s,"\\u017c","ż") s=string.replace(s,"\\u0104","Ą")s=string.replace(s,"\\u0106","Ć")s=string.replace(s,"\\u0118","Ę")s=string.replace(s,"\\u0141","Ł")s=string.replace(s,"\\u0143","Ń")s=string.replace(s,"\\u00d3","Ó")s=string.replace(s,"\\u015a","Ś")s=string.replace(s,"\\u0179","Ź")s=string.replace(s,"\\u017b","Ż") return s end def mok(i) if i==6 return false end if i==9 return self.i[9]!=nil end if i==8 return self.i[6]!=nil&&self.i[6]>self.wthr end if i==5 return self.i[5]!=nil&&self.i[5]>=self.pmthr end if i==10 return self.i[7]!=nil&&self.i[8]!=nil end return(i!=3&&i!=4)||self.t[i]!=nil end def mts() var m=month()var d=day()var h=hour()var n=minute()var s=second() return str(year())+"-"+(m<10?"0":"")+str(m)+"-"+(d<10?"0":"")+str(d)+" "+(h<10?"0":"")+str(h)+":"+(n<10?"0":"")+str(n)+":"+(s<10?"0":"")+str(s) end def at(b,c)if b==0 var a=string.tolower(str(c))a=a=="on"||a=="true"||a=="1"var e=self.ar self.ar=false if e&&a==store.get("nmqtt")return end store.set("nmqtt",a)store.set("nstate",a)self. aq=a else var d=re.search("-?[0-9]+[.]?[0-9]*",str(c))if d!=nil self.i[b]=num(d[0])self.j=true if b==1 self.tmq=true end if b==5 self.pmq=true end end end end def b(a,b)return rgb(int(((a>>16)&255)*b+0.5),int(((a>>8)&255)*b+0.5),int((a&255)*b+0.5))end def tmin(s)var p=string.find(s,"T")if p<0 return nil end return int(s[p+1..p+2])*60+int(s[p+4..p+5])end def dlval()if self.i[7]==nil||self.i[8]==nil return nil end var m2=self.i[8]-self.i[7]if m2<0 m2=m2+1440 end return str(m2/60)+":"+(m2%60<10?"0":"")+str(m2%60)end def dldraw(y,col)var dv=self.dlval()if dv==nil return end var tw=self.E(dv,self.a)+6 var x0=(52-tw)/2 var nx=self.l(x0,y,dv,self.a,col)self.l(nx+2,y,"h",self.a,col)end def pdelta()var mn=nil var mx=nil var i2=0 while i2mx mx=v2 end i2+=1 end if mn==nil||mx==nil return 0 end return mx-mn end def bmet(p)var d2=self.pdelta()if p<995||p>1035||d2>=8 return 0xFF0000 end if(p>=995&&p<1005)||(p>1020&&p<=1035)||d2>=3 return 0xFFFF00 end return 0x00FF00 end def bd(c,d,e,f,g)var a=d while a=0&&b<52&&a>=0&&a<16&&(self.R[a*52+b]c[0]c[0]=a+b end a+=b else a+=1 end end e+=1 end return c end def E(b,d)var c=-1 var a=0 while a=w0&&px=(g?1:0)c=b16 d=2 end self.z[a]=(15-b)/2 end self.al[a]=d self.aY[a]=b end def be(i,j,f)var g=now_ms()var a=self.p var c=nil if a==0 c=self.C[0] elif a==1 c=self.C[1] elif a==2||a==3 c=self.C[2] elif a==4 c=self.C[3] elif a==5||a==6 c=self.C[4+(g/700)%2] elif a==22||a==23||a==24 c=self.C[7] else c=self.C[6] end var h=0 var mx=0 var b=0 while bmx mx=c[b]+1 end b+=3 end var ox=i+(15-mx)/2 while c!=nil b=0 while b=180&&e<270))c=self.C[8]h=3 else c=nil end end if a>=7&&a<=21||a==23||a==24 var snow=a==15||a==16||a==17||a==20||a==21 var k=snow?6:0 var sp=180 if a==7||a==8 sp=300 elif a==12 sp=110 elif a==13||a==14 sp=150 elif a==15 sp=150 elif a==16 sp=110 elif a==17 sp=180 elif a==18 sp=90 elif a==19 sp=70 elif a==20 sp=110 elif a==21 sp=90 end var e=g/sp var d=0x2890FF if a==7||a==8 d=0x64B5F6 elif a==9||a==10||a==13||a==14 d=0x80D8FF elif a==12||a==19 d=0x0055FF elif a==16 d=0xE0F7FA elif snow||a==23||a==24 d=0xFFFFFF end if f<1 d=self.b(d,f)end b=0 while b<6 self.s(ox+self.ap[k+b],j+5+(e+self.ap[k+b+1])%3,1,1,d)b+=2 end end if a==9||a==10||a==13||a==14 var cg=now_ms()var cyc=cg%6600 var pi=0 var px=16 if cyc<1400 pi=(cg/250)%2 px=15-cyc*8/1400 elif cyc<1900 pi=2 px=7 elif cyc<2200 pi=3 px=7 elif cyc<3300 pi=4 px=5 elif cyc<4000 pi=5 px=6 elif cyc<4800 pi=(cg/250)%2 px=7-(cyc-4000)*12/800 end if px>=-4&&px<=14 var pb=self.fg[pi]var top=j+9-self.fgh[pi]+1 var qb=0 while qb=50)==self.D var i=self.ab[self.p]var e=a<1?self.b(0xC24CFF,a):0xC24CFF var f=self.ac[self.p]if f<9 scroll_text(c+9,h+16,42,i,e,self.wao)else text(c+f,h+16,i,e)end end end elif b==6 var t6=self.maMsg if t6==nil return end var t6u=self.mup(t6)var u6=a<1?self.b(self.maCol,a):self.maCol var lw=self.E("METEOALARM",self.a)+2 var total=lw+1+self.ma_w(t6u)+10 var off=int(now_ms()*40/1000)%total var lx=c+52-off rect_fill(lx,11,lw,5,u6)self.l(lx+1,11,"METEOALARM",self.a,0x000000)self.lm(lx+lw+1,11,t6u,u6,0,52) elif b==7 if self.mos==nil return end var aa=0 while aa<5 self.a8(self.mos[aa],c+1,11+aa,a)aa+=1 end var ph=self.moonp var q=int(ph*8+0.5)%8 var nm=["NOVA","CRESCENTE","QUARTO CRES","GIBOSA","CHEIA","GIBOSA","QUARTO MIN","CRESCENTE"][q]if self.k==nil||(self.k>=50)==self.D text(c+9,15,nm,a<1?self.b(0xFFFFFF,a):0xFFFFFF)end elif b==8 if self.i[6]==nil return end var wv=str(round(self.i[6]))+" km/h"if self.k==nil||(self.k>=50)==self.D self.wind_icon(c+1,10,7,a)text(c+9,15,wv,a<1?self.b(0xFFFFFF,a):0xFFFFFF)end elif b==5 var g=self.t[5]if g==nil return end var y=d self.l(c+1,y,"PM",self.a,a<1?self.b(0xFFFFFF,a):0xFFFFFF)var pmw=self.E("PM",self.a)+3 self.l(c+1+pmw,y,"2.5",self.a,a<1?self.b(0xFFFFFF,a):0xFFFFFF)var lblw=pmw+self.E("2.5",self.a)+3 var wv=self.E(g,self.a)var vx=c+51-wv if vx=50)==self.D scroll_text(c+11,16,24,"QUARTO",e,self.wao)end end var f=self.l(c+self.z[b],d,g,self.a,e)if b!=4 self.s(f,d,2,2,e)end end end def mph()var y=year()var m=month()var d=day()var a=(14-m)/12 var yy=y+4800-a var mm=m+12*a-3 var j=d+(153*mm+2)/5+365*yy+yy/4-yy/100+yy/400-32045 var p=(j-2451550)/29.530588853 p=p-int(p)if p<0 p=p+1 end return p end def moon_icon(w,h,cx,cy,rad)var p=self.moonp var th=p*6.283185307 var co=math.cos(th)var rows=[]var y=0 while y0.02&&p<0.98 var bd=co*rad*math.sqrt(1.0-(dy*dy)*1.0/(rad*rad))lit=p<=0.5?dx>=bd:dx<=-bd end if lit col=0xF0DC8C else var rr=rad-1.2 if d2>=rr*rr col=0x3C3C3C end end end if col!=0 var n=size(runs)if n>=3&&runs[n-1]==col runs[n-2]=runs[n-2]+1 else runs.push(x)runs.push(1)runs.push(col)end end x+=1 end rows.push(runs)y+=1 end return rows end def wind_icon(x,y,w,l)var g=now_ms()var wc=l<1?self.b(0xFFFFFF,l):0xFFFFFF var gc=l<1?self.b(0x848684,l):0x848684 var rc=l<1?self.b(0xF40214,l):0xF40214 var ax=x if w>8 ax=x+(w-8)/2 end var h=w>8?8:5 self.s(ax+1,y,1,3,rc)self.s(ax+2,y,1,3,wc)self.s(ax+3,y,1,3,rc)self.s(ax+1,y+3,1,h-3,gc)var pi=int((g/300)%6)var r0a=(pi==1||pi==2||pi==3)var r0b=(pi==3||pi==4||pi==5)var r2a=(pi==0||pi==4||pi==5)var r2b=(pi==0||pi==1||pi==2)if r0a self.s(ax+4,y,1,1,wc)end if r0b self.s(ax+5,y,1,1,rc)self.s(ax+6,y,1,1,wc)end self.s(ax+4,y+1,1,1,wc)self.s(ax+5,y+1,1,1,rc)self.s(ax+6,y+1,1,1,wc)if r2a self.s(ax+4,y+2,1,1,wc)end if r2b self.s(ax+5,y+2,1,1,rc)self.s(ax+6,y+2,1,1,wc)end end def m(b,d,e,c)if b<0 return end if self.e==2 return self.bf(b,d,e,c)end if b==0 var k=self.aU var a=0 while a<16 self.a8(k[a],d,e+a,c)a+=1 end if self.x!=nil var f=now_ms()-self.x if f>=1100 self.x=nil else if f<0 f=0 end var g=f/1100.0 var l=int(17*g*g+0.5)var n=int(3*g*g+0.5)k=self.aV a=15 while a>=(self.e==1?3:0)if a+l<=15 self.a8(k[a],d+(a+l>8?n:0),e+a+l,c)end a-=1 end end end elif b==2 if self.p==nil self.l(d+6,e+5,"?",self.a,c<1?self.b(0x666666,c):0x666666)else self.be(d,e+1,c)if self.k==nil||(self.k>=50)==self.D var wlab=self.ab[self.p]var wcol=c<1?self.b(0xC24CFF,c):0xC24CFF var wi=text_ink_width(wlab)if wi<=52 text(d+1,e+15,wlab,wcol)else scroll_text(d,e+15,52,wlab,wcol,self.wao)end end end elif b==6 var t6=self.maText if t6==nil return end var u6=c<1?self.b(self.maCol,c):self.maCol if self.e<2 rect_fill(d,e,15,9,u6)if self.k==nil||(self.k>=50)==self.D scroll_text(d,e+7,15,"METEOALARM",0x000000,self.mao)end else rect_fill(d,e,15,16,u6)if self.k==nil||(self.k>=50)==self.D scroll_text(d,e+11,15,"METEOALARM",0x000000,self.mao)end end elif b==7 if self.mo==nil return end var aa=0 while aa<16 self.a8(self.mo[aa],d,e+aa,c)aa+=1 end elif b==8 if self.i[6]==nil return end var wv=str(round(self.i[6]))+" km/h"if self.k==nil||(self.k>=50)==self.D self.wind_icon(d,1,15,c)text(0,16,wv,c<1?self.b(0xC24CFF,c):0xC24CFF)end elif b==5 var h=self.t[5]if h==nil return end var ucol=c<1?self.b(self.u[5],c):self.u[5]rect_fill(d,e,15,16,ucol)var plw=self.E("PM",self.a)var plx=d+(15-plw)/2 self.l(plx,e+2,"PM",self.a,c<1?self.b(0x000000,c):0x000000)var wv=self.E(h,self.a)var x2=d+(15-wv)/2 if x2=50)==self.D scroll_text(d,13,15,"hPa",bcol,self.ao)end elif b==10 var dc2=c<1?self.b(0xC24CFF,c):0xC24CFF self.dldraw(10,dc2)else var h=self.t[b]if h==nil return end var i=c<1?self.b(self.u[b],c):self.u[b]var j=self.al[ b]if j==2 if self.k==nil||(self.k>=50)==self.D scroll_text(d,e+(b==3||b==4?14:10),16,self.am[b],i,self.ao)end return end if b==3||b==4 if self.k==nil||(self.k>=50)==self.D scroll_text(d,6,15,"QUARTO",i,self.ao)end end var a=e+(j==0?4:5)+(b==3||b==4?4:0)var m=self.l(self.z[b]+d,a,h,j==0?self.f:self.a,i)if b!=4 self.s(m,a,2,2,i)end end end def draw()var l=now_ms()if minute()<0 clear()var a=self.r?4:self.e var b=self.r?0xFF0000:self.n if self.o==nil||self.o[0]!=a self.o=[a,(a==4||a==2||a==3)?self.g("--:--",self.f,self.H,2,1,0,52,a==4?3:0):self.g("--:--",self.a,self.G,2,2,17,34,0)]end self.h(self.o[1][0],b)self.h(self.o[1][1],b)return end if minute()!=self.ad var m=hour()var v=minute()self. ad=v if!self.au m=m%12 if m==0 m=12 end end var e=(self.av&&m<10?"0":"")+str(m)+":"+(v<10?"0":"")+str(v)var w=self.ak!=nil&&l-self.ak<1000?self.aN:e self.aN=e var f=self.g(e,self.f,self.H,2,1,0,52,0) self.aO=f[0]self.aP=f[1]f=self.g(e,self.f,self.H,2,1,0,52,3)self.aQ=f[0]self.aR=f[1]var a=self.e if a<2 f=self.g(e,self.a,self.G,2,2,17,34,0)self.aS=f[0]self.aT=f[1]end var d=day()var n=weekday()if d!=self.ai if self.ai!=nil&&self.W&&a<2&&self.d==0&&!self.r self.x=l end self.ai=d if self.moon_on self.moonp=self.mph()self.mo=self.moon_icon(15,16,7,7,7)self.mos=self.moon_icon(5,5,2,2,2)end var h=month()var u=year()if a<2 self.aU=self.a7(d,h,n)var y=d-1 var i=h if y==0 i=h==1?12:h-1 var z=h==1?u-1:u y=i==2?(z%4==0&&(z%100!=0||z%400==0)?29:28):(i==4||i==6||i==9||i==11?30:31)end self.aV= self.a7(y,i,(n+6)%7)else self.aW=self.aa6[n]var A=(d<10?"0":"")+str(d)var B=(h<10?"0":"")+str(h)var C=(u%100<10?"0":"")+str(u%100)self.aj=self.X==0?A+"."+B+"."+C:(self.X==1?B+"/"+A+"/"+C:C+ "-"+B+"-"+A)self.aX=51-self.E(self.aj,self.a)end end self.ag=[]self.ah=[]var g=0 while g<7 var b=self.ax?(g+1)%7:g var G=b==0||b==6 self.ag.push(b==n?(G?self.aA:self.ay):(G?self.aB:self.az))self.ah. push(b==n?0xFF0000:0xC00000)g+=1 end end clear()var o=self.r var a=self.e var mv=self.maText!=nil&&l=500||j==7 self.N=nil self.m(self.d,0,0,1)else var H=a==2?10:0 var r=a==2?52:16 var D=a==2?6:16 if j==0 var c=p*2*r/500 if c0 rect_fill(0,H,c,D,0)end else self.m(self. d,0,0,1)rect_fill(c-r,H,2*r-c,D,0)end elif j==1 self.m(p<250?self.y:self.d,0,0,(math.cos(2*math.pi*p/500.0)+1)*0.5)elif j==2 self.k=p/5 self.D=false self.m(self.y,0,0,1)self.D=true self.m(self.d,0,0,1 )self.k=nil else var s=j<5 var I=j==3||j==6?1:-1 var J=s?D:r var d=p*J/500*I var K=d-J*I self.m(self.y,s?0:d,s?d:0,1)self.m(self.d,s?0:K,s?K:0,1)end if a==2 rect_fill(0,0,52,10,0)else rect_fill(16,0, 36,16,0)end end end end var q=o?0xFF0000:self.n var t=1 if self.T==1 t=second()%2?0:1 elif self.T==2 t=0.5*(1-math.cos(2*math.pi*(epoch_ms()%2000)/2000.0))end var k=t<=0?nil:(t<1?self.b(q,t):q)if o self.h( self.aQ,q)if k!=nil self.h(self.aR,k)end elif a==2||a==3 self.h(self.aO,q)if k!=nil self.h(self.aP,k)end else self.h(self.aS,q)if k!=nil self.h(self.aT,k)end end if o?(self.aK&&self.d!=2&&self.d!=8&&self.d!=10):(self.w&& a<2&&!mv&&self.d!=2&&self.d!=8&&self.d!=10)var L=o?9:17 var M=o?self.ah:self.ag var g=0 while g<7 rect_fill(L,15,4,1,M[g])L+=5 g+=1 end end if !o&&(a==3||(a<2&&self.d==10)) rect_fill(0,15,52,1,0x505050)if self.i[7]!=nil&&self.i[8]!=nil var xs=52*self.i[7]/1440 var xe=52*self.i[8]/1440 if xe>xs rect_fill(xs,15,xe-xs,1,0xFFC800)end end end if !o&&a<2&&mv scroll_text(0,15,52,self.maMsg,self.maCol,self.mao)end if self.asw&&minute()%5==0&&second()==0&&(l-self.aswt>10000)self.aswt=l end if self.aswt>0 var dt=l-self.aswt var dur=800 if dt44?52-x:8)if x1<52&&w1>0 rect_fill(x1,0,w1,16,0)end else self.aswt=0 end end self.ak=l end end return NimbusPL()