Gira Homeserver DIY Logic Modules

Visualisatie in EIB-KNX systemen, een vak apart.
747driver
Berichten: 1475
Lid geworden op: za 19 feb 2011, 10:06

Re: Gira Homeserver DIY Logic Modules

Bericht door 747driver »

Nou helaas niet helemaal goed.
De Week reset kreeg ik op dinsdag om 00:00:00
Dat had natuurlijk op maandag 00:00:00 moeten zijn.
Denk dat de Seconden ingang eerder is veranderd dan de day of week ingang.
Heb de module aangepast en hoop dat het nu wel werkt.
747driver
Berichten: 1475
Lid geworden op: za 19 feb 2011, 10:06

Re: Gira Homeserver DIY Logic Modules

Bericht door 747driver »

Heb er een soort van stand-alone module van gemaakt.
De timer zit er in verwerkt dus zijn er geen externe signalen nodig.
Ben er nog niet achter of het mogelijk is om een module te maken zonder ingangen.
Is me tot nu toe nog niet gelukt.
Onderstaande module heb nu een tijdje in gebruik waarbij ik op de uitgangen een output/command aansluit welke een bericht in een message archieve plaatst.
Tot nu toe de minuten, uren, dag en week resets kunnen testen en deze werken toppie.
Weet over 2 dagen of de maand en jaar resets ook correct werken.
Met name de jaar reset ben ik niet zeker van.
Volgens de documentatie bij de Date+Time module zou de "day of year" op 01-01 0 zijn.
Op de Python site zou dat 1 zijn...

De eerste 5012 regel haalt de seconde op, de tweede zet een 1 in het tijd geheugen en de derde regel kijkt of seconde==0
Indien dat niet het geval is worden de daaropvolgende regels niet uitgevoerd.
Wanneer iemand een fout in de code ziet of denkt dat het simpeler kan, ik hoor het graag!
Kzie zelf al dat geheugenplaats 1 waar de seconde in wordt gezet bv niet nodig is.

Code: Selecteer alles

### 10013_Time_Resets_testversie

#5000|"Text"|Retentive (1/0)|No. of inputs|.n.|No. of outputs|.n.|.n.
#5001|No. of inputs|Outputs|Offset|Memory|Calculation during start
#5002|Index input|Default value|0=numeric 1=alphanumeric
#5003|Memory|Initialisation value|Retentive
#5004|Output|Initialisation value|round binary (0/1)|type (1-send/2-sbc)|0=numeric 1=alphanumeric
#5012|cancellation with con. (0/1)|condition|formula|time|pin output|pin offset|pin memory|pin neg. output

#5000|Folder\Name | Retentive (1/0) | No. of inputs | Input names | No. of outputs | Outputs names
5000|"747driver\Time Resets testversie"|0|1|"NC"|6|"Minute reset"|"Hour reset"|"Day reset"|"Week reset"|"Month reset"|"Year reset"

#Logic module definition
#   |Input(s)
#   | |Output(s)
#   | | |Time memory
#   | | | |Variable(s)
#   | | | | |Calculate at startup: 1=Yes 2=No
5001|1|6|1|6|1

#5002 Inputs EN[n]
#   |Input index
#   | |Default value
#   | | |0=num 1=text
5002|1|0|0

#5003 Memory variables SN[n]
#   |Memory variable index
#   | |Default value
#   | | |Remanent 0=No 1=Yes
5003|1|0|0	# Second
5003|2|0|0	# Minute
5003|3|0|0	# Hour
5003|4|0|0	# Day of week
5003|5|0|0	# Day of month
5003|6|0|0	# Day of year

#5004 Outputs AN[n]
#   |Output index
#   | |Default value
#   | | |Binary 0=No 1=Yes
#   | | | |1=send, 2=sbc
#   | | | | |0=num 1=alphanum
5004|1|0|1|1|0	# Reset minute
5004|2|0|1|1|0	# Reset hour
5004|3|0|1|1|0	# Reset day
5004|4|0|1|1|0	# Reset week
5004|5|0|1|1|0	# Reset month
5004|6|0|1|1|0	# Reset year

#Logic formula
#5012|0|"Condition"|"Formula"|"Time Formula"|Put result into Output#|Put result into Time memory#|Put result into Variable#|Inverted#
5012|0|""|"__import__('time').localtime()[5]"           |"" |0|0|1|0	# Second (0-61)
5012|0|"EI or OC[1]"|""                                 |"1"|0|1|0|0	# On ini and if time memory reaches 0
5012|1|"SN[1]<>0"   |""                                 |"" |0|0|0|0	# Skip everything below if seconds<>0
5012|0|""           |"__import__('time').localtime()[4]"|"" |0|0|2|0	# Minute (0-59)
5012|0|""           |"__import__('time').localtime()[3]"|"" |0|0|3|0	# Hour (0-23)
5012|0|""           |"__import__('time').localtime()[6]"|"" |0|0|4|0	# DOW (0-6)
5012|0|""           |"__import__('time').localtime()[2]"|"" |0|0|5|0	# DOM (1-31)
5012|0|""           |"__import__('time').localtime()[7]"|"" |0|0|6|0	# DOY (1-366)
#
#Produce the reset signals
#
5012|0|""                                  |"1"|""|1|0|0|0	# Reset minute
5012|0|"SN[2]==0"                          |"1"|""|2|0|0|0	# Minute=0 --> Reset hour
5012|0|"SN[2]==0 and SN[3]==0"             |"1"|""|3|0|0|0	# Minute=hour=0 --> Reset day
5012|0|"SN[2]==0 and SN[3]==0 and SN[4]==0"|"1"|""|4|0|0|0	# Minute=hour=day of week=0 --> Reset week
5012|0|"SN[2]==0 and SN[3]==0 and SN[5]==1"|"1"|""|5|0|0|0	# Minute=hour=0 and day of month=1 --> Reset month
5012|0|"SN[2]==0 and SN[3]==0 and SN[6]==1"|"1"|""|6|0|0|0	# Minute=hour=0 and day of year=1 --> Reset year
IMG_0047.jpg
IMG_0047.jpg (16.24 KiB) 8407 keer bekeken
pvhuf
Berichten: 246
Lid geworden op: vr 28 dec 2012, 18:28

Re: Gira Homeserver DIY Logic Modules

Bericht door pvhuf »

747driver schreef: Ben er nog niet achter of het mogelijk is om een module te maken zonder ingangen.
Ik denk het niet, maar je kan natuurlijk wel modules gebruiken in een sheet zonder dat er ingangen worden aangesloten op een inputbox. Die ingangen gebruiken dan een defaultwaarde.
747driver
Berichten: 1475
Lid geworden op: za 19 feb 2011, 10:06

Re: Gira Homeserver DIY Logic Modules

Bericht door 747driver »

Nou ja, zo belangrijk is het niet.
Heb 'm nu een ingang gegeven welke toch niet wordt gebruikt in de formules.
De module heeft ook de maand en jaarwisseling goed doorstaan!
Bij deze is ie voor mij testversie af, zal de naam dus worden gewijzigd in "Time Resets" en zal ie de huidige in gebruik zijnde versie welke nog gebruik maakt van de uitgangen van de Date+Time module vervangen.
747driver
Berichten: 1475
Lid geworden op: za 19 feb 2011, 10:06

Re: Gira Homeserver DIY Logic Modules

Bericht door 747driver »

Naar aanleiding van een opmerking van Rainer van het Duitse KNX forum heb ik de module nogmaals aangepast.
Hij schreef me dat het fout zou kunnen gaan indien de HS het zeer druk heeft ten tijde van de overgang van seconde 59 naar seconde 0.
Tegen de tijd dat de module zou worden geprocessed zou de systeem seconde reeds 1 kunnen zijn en worden de resets niet uitgevoerd!
Beter is om te vergelijken met een eerder opgeslagen waarde.
Ook al is de seconde dan inmiddels 1 dan gaat het toch goed.

Ben de vernieuwde module nu aan het testen en hij lijkt goed te werken.
Komt erop neer dat bij het opstarten van de HS the actuele minuut wordt opgeslagen en de timer wordt geladen met 1 en dan de module wordt verlaten.
Wanneer de timer afloopt checked ie of de actuele minuut gelijk is aan de opgeslagen minuut.
Indien gelijk wordt de module verlaten.
Indien niet gelijk stored ie de actuele minuut en worden de resets zoals in de vorige module gegeven.
De Minute reset werkt correct en aangezien de andere resets er onder staan zullen die ook goed gaan werken.
747driver
Berichten: 1475
Lid geworden op: za 19 feb 2011, 10:06

Re: Gira Homeserver DIY Logic Modules

Bericht door 747driver »

Module werkt goed en ziet er nu als volgt uit.

Code: Selecteer alles

### 10013_Time_Resets

#5000|"Text"|Retentive (1/0)|No. of inputs|.n.|No. of outputs|.n.|.n.
#5001|No. of inputs|Outputs|Offset|Memory|Calculation during start
#5002|Index input|Default value|0=numeric 1=alphanumeric
#5003|Memory|Initialisation value|Retentive
#5004|Output|Initialisation value|round binary (0/1)|type (1-send/2-sbc)|0=numeric 1=alphanumeric
#5012|cancellation with con. (0/1)|condition|formula|time|pin output|pin offset|pin memory|pin neg. output

#5000|Folder\Name | Retentive (1/0) | No. of inputs | Input names | No. of outputs | Outputs names
5000|"747driver\Time Resets"|0|1|"NC"|6|"Minute reset"|"Hour reset"|"Day reset"|"Week reset"|"Month reset"|"Year reset"

#Logic module definition
#   |Input(s)
#   | |Output(s)
#   | | |Time memory
#   | | | |Variable(s)
#   | | | | |Calculate at startup: 1=Yes 2=No
5001|1|6|1|6|1

#5002 Inputs EN[n]
#   |Input index
#   | |Default value
#   | | |0=num 1=text
5002|1|0|0

#5003 Memory variables SN[n]
#   |Memory variable index
#   | |Default value
#   | | |Remanent 0=No 1=Yes
5003|1|0|0	# Last minute
5003|2|0|0	# Minute
5003|3|0|0	# Hour
5003|4|0|0	# Day of week
5003|5|0|0	# Day of month
5003|6|0|0	# Day of year

#5004 Outputs AN[n]
#   |Output index
#   | |Default value
#   | | |Binary 0=No 1=Yes
#   | | | |1=send, 2=sbc
#   | | | | |0=num 1=alphanum
5004|1|0|1|1|0	# Reset minute
5004|2|0|1|1|0	# Reset hour
5004|3|0|1|1|0	# Reset day
5004|4|0|1|1|0	# Reset week
5004|5|0|1|1|0	# Reset month
5004|6|0|1|1|0	# Reset year

#5012 Logic formula
#   |End calculation when <>0 (1=YES 0=NO)
#   | |"Condition"
#   | |              |"Formula"
#   | |              |                                   |"Time Formula"
#   | |              |                                   |   |Put result into Output
#   | |              |                                   |   | |Put result into Time memory
#   | |              |                                   |   | | |Put result into Variable
#   | |              |                                   |   | | | |Inverted
5012|1|"EI"          |"__import__('time').localtime()[4]"|"1"|0|1|1|0	# Only on ini: store minute, load time memory with 1 en exit
5012|0|"OC[1]"       |""                                 |"1"|0|1|0|0	# Reload time memory with 1
5012|0|""            |"__import__('time').localtime()[4]"|"" |0|0|2|0	# Store actual minute (0-59) in memory #2
5012|1|"SN[2]==SN[1]"|""                                 |"" |0|0|0|0	# Skip everything below if actual minute = last minute
#
# when we get past this point the time's minute has changed.
#
5012|0|""            |"SN[2]"                            |"" |0|0|1|0	# Store new actual minute in memory #1 (last minute)
5012|0|""            |"__import__('time').localtime()[3]"|"" |0|0|3|0	# Hour (0-23)
5012|0|""            |"__import__('time').localtime()[6]"|"" |0|0|4|0	# DOW (0-6)
5012|0|""            |"__import__('time').localtime()[2]"|"" |0|0|5|0	# DOM (1-31)
5012|0|""            |"__import__('time').localtime()[7]"|"" |0|0|6|0	# DOY (1-366)
#
#Produce the reset signals
#
5012|0|""                                  |"1"|""|1|0|0|0	# Reset minute
5012|0|"SN[2]==0"                          |"1"|""|2|0|0|0	# Minute=0 --> Reset hour
5012|0|"SN[2]==0 and SN[3]==0"             |"1"|""|3|0|0|0	# Minute=hour=0 --> Reset day
5012|0|"SN[2]==0 and SN[3]==0 and SN[4]==0"|"1"|""|4|0|0|0	# Minute=hour=day of week=0 --> Reset week
5012|0|"SN[2]==0 and SN[3]==0 and SN[5]==1"|"1"|""|5|0|0|0	# Minute=hour=0 and day of month=1 --> Reset month
5012|0|"SN[2]==0 and SN[3]==0 and SN[6]==1"|"1"|""|6|0|0|0	# Minute=hour=0 and day of year=1 --> Reset year
Plaats reactie