Dubbel bediening logica Homeserver

Visualisatie in EIB-KNX systemen, een vak apart.
Plaats reactie
cevers
Berichten: 183
Lid geworden op: wo 03 jul 2013, 20:12

Dubbel bediening logica Homeserver

Bericht door cevers »

Ben even bezig met de logica voor een dubbel bediening.
Dus als ik in het toilet 2x binnen 3 seconden aan druk op de 1v schakelaar moet de ventilator hoog gaan lopen.

Code: Selecteer alles

#Reset
5012|1|"OC[1]"|"0"|""|0|0|1|0 

#1ste Aan: 1 in geheugen 1, ingang 2 in tijd 1
5012|1|"EC[1] and EN[1] == 1 and SN[1] == 0"|"1"|"EN[2]"|0|1|1|0 

#1ste Uit: 2 in geheugen 1, ingang 2 in tijd 1
5012|1|"EC[1] and EN[1] == 0 and SN[1] == 0"|"2"|"EN[2]"|0|1|1|0

#Reset als ingang 1 = 1 en geheugen 1 = 2 en timer 1 loopt
5012|1|"EC[1] and EN[1] == 1 and SN[1] == 2 and OC[1] == 0"|"0"|"0"|0|1|1|0

#Als ingang 1 = 1 en geheugen 1 = 1 en timer 1 loopt. Zet uitgang 1 op 1. Daarna tijd 1 en geheugen 1 op 0
5012|0|"EC[1] and EN[1] == 1 and SN[1] == 1 and OC[1] == 0"|"1"|""|1|0|0|0
5012|1|"EC[1] and EN[1] == 1 and SN[1] == 1 and OC[1] == 0"|"0"|"0"|0|1|1|0

#Reset als ingang 1 = 0 en geheugen 1 = 1 en timer loopt
5012|1|"EC[1] and EN[1] == 0 and SN[1] == 1 and OC[1] == 0"|"0"|"0"|0|1|1|0

#Als ingang 1 = 0 en geheugen 1 = 2 en timer 1 loopt. Zet uitgang 2 op 1. Daarna tijd 1 en geheugen 1 op 0
5012|0|"EC[1] and EN[1] == 0 and SN[1] == 2 and OC[1] == 0"|"1"|""|2|0|0|0
5012|1|"EC[1] and EN[1] == 0 and SN[1] == 2 and OC[1] == 0"|"0"|"0"|0|1|1|0
Aan en uit doen het prima. Maar als ik aan stuur en dan binnen 3 seconden uit stuur dan reageert hij niet op de 2de uit. Maar moet ik eerst toch die 3 seconden wachten.
In de praktijk zal dit nooit voorkomen. Maar meer benieuwd waar ik een denk fout heb gemaakt?
Zal dit ook op het Duitse forum posten. Maar dat zal in het Engels moeten :D mijn duits is niet zo best :S
brammetje
Berichten: 123
Lid geworden op: zo 02 feb 2020, 10:19
Locatie: Axel, NL

Re: Dubbel bediening logica Homeserver

Bericht door brammetje »

Bouwsteen 16741 doet dit al voor je, kan je van de Duitse site halen.
cevers
Berichten: 183
Lid geworden op: wo 03 jul 2013, 20:12

Re: Dubbel bediening logica Homeserver

Bericht door cevers »

brammetje schreef:
wo 15 apr 2020, 16:26
Bouwsteen 16741 doet dit al voor je, kan je van de Duitse site halen.
Zover ik kan zien stuurt deze alleen maar een 1 op uitgang 2 en een 0 op uitgang 4 bij aan. Maar doet hij niks bij uit.
Dat terzijde wil ik graag waar het bij mij mis ging kwa tussendoor van aan naar uit sturen.

Zal eens zijn code bekijken om te zien wat hij anders doet. Lijkt erop dat hij het doet aan de hand van de huidige tijd ipv alleen de timers.
brammetje
Berichten: 123
Lid geworden op: zo 02 feb 2020, 10:19
Locatie: Axel, NL

Re: Dubbel bediening logica Homeserver

Bericht door brammetje »

Ik gebruik die bouwsteen alleen voor 'aan'. Uit gaat automatisch na een andere gebeurtenis. Als je ook door een klik of dubbelklik 'om' wilt schakelen, heb ik dat binnen de homeserver gedaan met bouwsteen 15050. De terugmelding van bijvoorbeeld het licht is dan verbonden op E1, de '1' van de schakelaar (die bij mij altijd '1' stuurt waar ik dit gebruik) is dan verbonden op E2. A0 schakelt dan bijvoorbeeld 'Aan', A1 schakelt 'Uit'.
Ik zal later vanavond eens kijken of ik kan begrijpen wat er gebeurt met jouw tussendoor aan naar uit sturen. Maar hoe stuur je dan die 'aan' of 'uit'? Kan je een screenshot posten van de logische schakeling?
cevers
Berichten: 183
Lid geworden op: wo 03 jul 2013, 20:12

Re: Dubbel bediening logica Homeserver

Bericht door cevers »

Zal een screenshot maken. Probeer alleen uit te zoeken waarom mijn blok niet "reset".
Zoals ik zei zal het in de praktijk niet uitmaken kwam er alleen achter tijdens testen.

Het gedrag dat ik geprogrammeerd heb is:

Ingang krijgt een AAN, timer begint te lopen en ik sla "1" op in het geheugen. Als er nu weer een AAN binnenkomt tijdens het lopen van de timer en het geheugen is 1: Word uitgang 1 hoog, geheugen op 0, timer op 0

Ingang krijgt een UIT, timer begint te lopen en ik sla "2" op in het geheugen. Als er nu weer een UIT binnenkomt tijdens het lopen van de timer en het geheugen is 2: Word uitgang 2 hoog, geheugen op 0, timer op 0

Zover zo goed. Wat "mis" gaat is als ik een AAN verstuur en dan binnen de tijd een UIT lijkt het erop dat de timer niet word gereset.
Ik moet dan namelijk de timer afwachten tot hij weer reageert zoals hierboven.

Begin het idee te krijgen dat je een timer niet kan laten stoppen.

5012|1|"EC[1] and EN[1] == 1 and SN[1] == 2 and OC[1] == 0"|"0"|"0"|0|1|1|0

Zou namelijk moeten werken? Ingang 1 krijgt een AAN nadat ik eerst een UIT had gestuurd (dus geheugen op 2) en timer loopt nog.
Op dat moment stuur ik een 0 in het geheugen en een 0 in de timer.
brammetje
Berichten: 123
Lid geworden op: zo 02 feb 2020, 10:19
Locatie: Axel, NL

Re: Dubbel bediening logica Homeserver

Bericht door brammetje »

Ik ben geen pro in modules met timers en geheugen - ik heb tot nu toe alleen simpele modules gemaakt, door bestaande modules aan te passen.
Wat ik denk te weten:
Als EC '1' is, dan is de ingang gewijzigd (bijvoorbeeld van '0' naar '1'). Als deze '0' is, is deze niet gewijzigd.
Je stuurt bij een frisse start (de ingang is nog '0') een eerste '1' als het geheugen '0' is:
5012|1|"EC[1] and EN[1] == 1 and SN[1] == 0"|"1"|"EN[2]"|0|1|1|0
Dan heeft het geuegen SN[1] de waarde '1'.
Nu stuur je een '0' ('Uit'). Dan moet ingang 1 gewijzigd zijn van 'Aan' naar 'Uit', EC[1] moet dan dus '1' zijn. Dan moet ik zoeken naar de regel met EC[1]==1 en EN[1]==0 en SN[1]==1. Maar die regel zit er niet in, en zal er dus geen actie binnen de module zijn.
Mee eens?
cevers
Berichten: 183
Lid geworden op: wo 03 jul 2013, 20:12

Re: Dubbel bediening logica Homeserver

Bericht door cevers »

brammetje schreef:
za 18 apr 2020, 21:58
EC[1]==1 en EN[1]==0 en SN[1]==1. Maar die regel zit er niet in, en zal er dus geen actie binnen de module zijn.
Mee eens?

Code: Selecteer alles

#Reset als ingang 1 = 0 en geheugen 1 = 1 en timer loopt
5012|1|"EC[1] and EN[1] == 0 and SN[1] == 1 and OC[1] == 0"|"0"|"0"|0|1|1|0
Staat erin. OC[1] is om te controleren of de timer actief is.
Bij deze voorwaarde word "0" in tijd geheugen 1 gezet en "0" in geheugen 1

EC[1] == 1 is niet nodig aangezien in python dit als een Boolean word gezien. Dus > 1 = Waar, 0 = Onwaar.
Ik moet wel die vergelijking maken met SN[1] aangezien anders beide de waarde "1" en "2" beide Waar zouden zijn :mrgreen:

Maar ik zal vandaag even testen of de timer überhaupt stopt als ik er een "0" in zet. (of dat een "" moet zijn).
Vermoed dat de timer gewoon afmaakt.
cevers
Berichten: 183
Lid geworden op: wo 03 jul 2013, 20:12

Re: Dubbel bediening logica Homeserver

Bericht door cevers »

Code: Selecteer alles

5000|"Extra Logica\DubbelBediening"|0|2|"Bediening"|"Tijd(sec)"|2|"DubbelAan"|"DubbelUit"|"1.0a"

#2 Ingangen|2 Uitgangen|1 Tijd Var|2 Var|Geen berekening bij init
5001|2|2|1|1|0

#Definitie Ingangen: 5002|Ingang nr|Init waarde|0=getal, 1=tekst
5002|1|0|0
5002|2|3|0

#Definitie Variabelen: 5003|Index nr|Init waarde|Vast geheugen
5003|1|0|0

#Definitie Uitgangen: 5004|Uitgang nr|Init Waarde|Binair afronden|Zenden bij 1=Berekening/2=Verandering|1=Tekst
5004|1|0|0|1
5004|2|0|0|1


#Definitie Formules:
#5012|Stoppen na berekening 1=ja|Voorwaarde Formule|Formule|Tijd Formule|Uitgang nr|Tijd Index|Var Index|Uitgang nr Negatief

#Als Tijd Index afloopt, zet 0 in Var Index 1, Stop Berekening
5012|1|"OC[1]"|"0"|""|0|0|1|0 

#Reset bij AAN met geheugen op UIT en bij UIT met geheugen op AAN
5012|0|"EC[1] and EN[1] == 0 and SN[1] == 1 and OC[1] == 0"|"0"|"0"|0|1|1|0
5012|0|"EC[1] and EN[1] == 1 and SN[1] == 2 and OC[1] == 0"|"0"|"0"|0|1|1|0

#Als Ingang 1 = 1 en Var Index 1 = 0, zet 1 in Var index 1 en Ingang 2 in Tijd Index 1, Stop Berekening
5012|1|"EC[1] and EN[1] == 1 and SN[1] == 0"|"1"|"EN[2]"|0|1|1|0 
#Als Ingang 1 = 0 en Var Index 1 = 0, zet 2 in Var index 1 en Ingang 2 in Tijd Index 1, Stop Berekening
5012|1|"EC[1] and EN[1] == 0 and SN[1] == 0"|"2"|"EN[2]"|0|1|1|0


#Als Ingang 1 = 1 en Var 1 = 1 en Timer loopt dan "1" op uitgang 1
#Daarna Tijd Index 1 op "0" en Var 1 op "0", Stop Berekening
5012|0|"EC[1] and EN[1] == 1 and SN[1] == 1 and OC[1] == 0"|"1"|""|1|0|0|0
5012|1|"EC[1] and EN[1] == 1 and SN[1] == 1 and OC[1] == 0"|"0"|"0"|0|1|1|0

#Als Ingang 1 = 0 en Var 1 = 2 en Timer loopt dan "1" op uitgang 2
#Daarna Tijd Index 1 op "0" en Var 1 op "0", Stop Berekening
5012|0|"EC[1] and EN[1] == 0 and SN[1] == 2 and OC[1] == 0"|"1"|""|2|0|0|0
5012|1|"EC[1] and EN[1] == 0 and SN[1] == 2 and OC[1] == 0"|"0"|"0"|0|1|1|0
2 fouten gemaakt kwam ik achter.
Fout 1 was dat ik stopte met de logica nadat ik de reset had uitgevoerd.
Fout 2 is de volgorde. De reset voorwaarde moest voor alles behalve de timer verloop lijn

Code: Selecteer alles

#Als Tijd Index afloopt, zet 0 in Var Index 1, Stop Berekening
5012|1|"OC[1]"|"0"|""|0|0|1|0 
Blijft leuk om uit te zoeken, gelukkig het document gevonden waarin alle objecten zoals EN, SN , enz in worden besproken. Dat samen met bestaande logica bekijken was de enige manier om er uit te komen. Plus wat hulp hier, hardop dingen bespreken helpt altijd. :mrgreen:
Plaats reactie