nodo-domotica.nl

Random

Met de Nodo commando's en dee Eventlist kun je vrijwel elke domotica wens realiseren. De Nodo beschikt hiervoor over een eigen script-taal waarmee u uw domotica wensen kunt realiseren. Plaats hier uw vragen en tips die hier op betrekking hebben.

Random

Berichtdoor erik » 01 jan 2015, 15:29

Onder het hoofdstuk Nodo Software heb ik geschreven over mijn bedenking en wensen tav de Random funktie (TimerRandom). Onderstaand een gedeeltelijke workaround.
Opgave:
Na een externe event (schemerschakelaar) een viertal lampen aanmaken.
Tbv de simulatie van aanwezigheid moeten deze lampen aangaan met een willekeurige tussentijd van 10 tot 60 seconden.

EventlistWrite; Boot 1; VariableSet 1,0;
EventlistWrite; NewKAKU 0xD429B81,On; TimerSet 1,1;

EventlistWrite; Timer 1; VariableInc 1,1;
EventlistWrite; Timer 1; Userevent 1,2;
EventlistWrite; Timer 1; Userevent 2,1;
EventlistWrite; Timer 1; Userevent 2,2;
EventlistWrite; Timer 1; Userevent 3,1;
EventlistWrite; Timer 1; Userevent 3,2;
EventlistWrite; Timer 1; Userevent 4,1;
EventlistWrite; Timer 1; Userevent 4,2;

EventlistWrite; UserEvent 1,2; BreakOnVarNEqu 1,1;
EventlistWrite; UserEvent 1,2; NewKakuSend 1,On;
EventlistWrite; UserEvent 1,2; TimerSet 1,10;

EventlistWrite; UserEvent 2,1; BreakOnVarNEqu 1,2;
EventlistWrite; UserEvent 2,1; TimerRandom 1,50;
EventlistWrite; UserEvent 2,2; BreakOnVarNEqu 1,3;
EventlistWrite; UserEvent 2,2; NewKakuSend 2,On;
EventlistWrite; UserEvent 2,2; TimerSet 1,10;

EventlistWrite; UserEvent 3,1; BreakOnVarNEqu 1,4;
EventlistWrite; UserEvent 3,1; TimerRandom 1,50;
EventlistWrite; UserEvent 3,2; BreakOnVarNEqu 1,5;
EventlistWrite; UserEvent 3,2; NewKakuSend 3,On;
EventlistWrite; UserEvent 3,2; TimerSet 1,10;

EventlistWrite; UserEvent 4,1; BreakOnVarNEqu 1,6;
EventlistWrite; UserEvent 4,1; TimerRandom 1,50;
EventlistWrite; UserEvent 4,2; BreakOnVarNEqu 1,7;
EventlistWrite; UserEvent 4,2; NewKakuSend 4,On;
EventlistWrite; UserEvent 4,2; VariableSet 1,0;

Om de aanwezigheidssimulatie nog echter te maken zou de volgorde van de lampen ook willekeurig moeten zijn
erik
 
Berichten: 58
Geregistreerd: 12 dec 2014, 18:04

Re: Random

Berichtdoor erik » 09 jan 2015, 18:09

Vervolg:
Ik heb 2 plugins geschreven:
VariableRandom (VariableRandom var, max VariableRandom var, min, max)
TimerTrueRandom (TimerTrueRandom timer,max TimerTrueRandom timer, min, max)
In beide plugins wordt bij de initialisatie een randomseed uitgevoerd.

Terug na eerder vemelde opgave:
Op willekeurige volgorde 4 lampen schakelen met een willekeurige tussentijd van 10 tot 60 seconden.
Deze script is niet efficient maar hopenlijk wel duidelijk.

EventlistWrite; Boot 1; VariableSet 1,0;
EventlistWrite; Boot 1; VariableSet 2,0;
EventlistWrite; Boot 1; VariableSet 3,0;
EventlistWrite; Boot 1; VariableSet 4,0;
EventlistWrite; Boot 1; VariableSet 5,0;
EventlistWrite; NewKAKU 0xD429B81,On; TimerSet 1,-1 !schemering aangebroken

EventlistWrite; Timer 1; BreakOnVarEqu 5,4 !alle 4 lampen gehad, einde
EventlistWrite; Timer 1; VariableRandom 6,1,5 !bepaal willekeurig de lamp (1-4)
EventlistWrite; Timer 1; VariableSet 7,0 !wordt op 1 gezet als een lamp deze ronde is verwerkt
EventlistWrite; Timer 1; Userevent 1,1 !lamp 1
EventlistWrite; Timer 1; Userevent 1,2 !lamp 2
EventlistWrite; Timer 1; Userevent 1,3 !lamp 3
EventlistWrite; Timer 1; Userevent 1,4 !lamp 4
EventlistWrite; Timer 1; Userevent 1,5 !misschien deze ronde geen nieuwe lamp verwerkt?

EventlistWrite; UserEvent 1,1; BreakOnVarNEqu 6,1 !is deze lamp aan de beurt, zo niet wegwezen
EventlistWrite; UserEvent 1,1; BreakOnVarEqu 1,1 !is deze lamp al verwerkt? zo ja wegwezen
EventlistWrite; UserEvent 1,1; NewKakuSend 1,On !verwerk deze lamp
EventlistWrite; UserEvent 1,1; VariableSet 1,1 !waarvan akte
EventlistWrite; UserEvent 1,1; VariableSet 7,1 !geef aan dat er in deze ronde een lamp is verwerkt
EventlistWrite; UserEvent 1,1; VariableInc 5,1 !verhoog het aantal verwerkte lampen
EventlistWrite; UserEvent 1,1; TimerTrueRandom 1,10,60 !timer instellen tussen 10 en 59 seconden

EventlistWrite; UserEvent 1,2; BreakOnVarNEqu 6,2 !idem
EventlistWrite; UserEvent 1,2; BreakOnVarEqu 2,1
EventlistWrite; UserEvent 1,2; NewKakuSend 2,On
EventlistWrite; UserEvent 1,2; VariableSet 2,1
EventlistWrite; UserEvent 1,2; VariableSet 7,1
EventlistWrite; UserEvent 1,2; VariableInc 5,1
EventlistWrite; UserEvent 1,2; TimerTrueRandom 1,10,60

EventlistWrite; UserEvent 1,3; BreakOnVarNEqu 6,3 !idem
EventlistWrite; UserEvent 1,3; BreakOnVarEqu 3,1
EventlistWrite; UserEvent 1,3; NewKakuSend 3,On
EventlistWrite; UserEvent 1,3; VariableSet 3,1
EventlistWrite; UserEvent 1,3; VariableSet 7,1
EventlistWrite; UserEvent 1,3; VariableInc 5,1
EventlistWrite; UserEvent 1,3; TimerTrueRandom 1,10,60

EventlistWrite; UserEvent 1,4; BreakOnVarNEqu 6,4 !idem
EventlistWrite; UserEvent 1,4; BreakOnVarEqu 4,1
EventlistWrite; UserEvent 1,4; NewKakuSend 4,On
EventlistWrite; UserEvent 1,4; VariableSet 4,1
EventlistWrite; UserEvent 1,4; VariableSet 7,1
EventlistWrite; UserEvent 1,4; VariableInc 5,1
EventlistWrite; UserEvent 1,4; TimerTrueRandom 1,10,60

EventlistWrite; UserEvent 1,5; BreakOnVarEqu 7,1 !er is deze ronde een lamp verwerkt en dus is de timer gezet
EventlistWrite; UserEvent 1,5; TimerSet 1,-1 !anders weer een timer 1 event aanmaken.
erik
 
Berichten: 58
Geregistreerd: 12 dec 2014, 18:04

Re: Random

Berichtdoor erik » 11 jan 2015, 12:47

Aanwezigheidssimulatie:
Als we thuis de lampen aandoen gaat dat nooit op een volledig willekeurige volgorde.
Meestal via een vast patroon, waar wel soms van wordt afgeweken.
Stel dat het normale patroon is lamp 1, 4, 2 en 3.
We nemen nu steeds een random waarde van 1 tm 10.
We geven lamp 1 een hit-kans van 40&, lamp 2 20%, lamp 3 10% en lamp 4 30%


EventlistWrite; Boot 1; VariableSet 1,0;
EventlistWrite; Boot 1; VariableSet 2,0;
EventlistWrite; Boot 1; VariableSet 3,0;
EventlistWrite; Boot 1; VariableSet 4,0;
EventlistWrite; Boot 1; VariableSet 5,0;
EventlistWrite; NewKAKU 0xD429B81,On; TimerSet 1,-1 !schemering aangebroken

EventlistWrite; Timer 1; BreakOnVarEqu 5,4 !alle 4 lampen gehad, einde
EventlistWrite; Timer 1; VariableRandom 6,1,11 !bepaal willekeurig de lamp (1-4), met vvorkeur
EventlistWrite; Timer 1; VariableSet 7,0 !wordt op 1 gezet als een lamp deze ronde is verwerkt
EventlistWrite; Timer 1; Userevent 1,1 !lamp 1
EventlistWrite; Timer 1; Userevent 1,2 !lamp 2
EventlistWrite; Timer 1; Userevent 1,3 !lamp 3
EventlistWrite; Timer 1; Userevent 1,4 !lamp 4
EventlistWrite; Timer 1; Userevent 1,5 !misschien deze ronde geen nieuwe lamp verwerkt?

EventlistWrite; UserEvent 1,1; BreakOnVarMore 6,4 !is deze lamp aan de beurt, zo niet wegwezen
EventlistWrite; UserEvent 1,1; BreakOnVarEqu 1,1 !is deze lamp al verwerkt? zo ja wegwezen
EventlistWrite; UserEvent 1,1; NewKakuSend 1,On !verwerk deze lamp
EventlistWrite; UserEvent 1,1; VariableSet 1,1 !waarvan akte
EventlistWrite; UserEvent 1,1; VariableSet 7,1 !geef aan dat er in deze ronde een lamp is verwerkt
EventlistWrite; UserEvent 1,1; VariableInc 5,1 !verhoog het aantal verwerkte lampen
EventlistWrite; UserEvent 1,1; TimerTrueRandom 1,10,60 !timer instellen tussen 10 en 59 seconden

EventlistWrite; UserEvent 1,2; BreakOnVarLess 6,5 !idem
EventlistWrite; UserEvent 1,2; BreakOnVarMore 6,6
EventlistWrite; UserEvent 1,2; BreakOnVarEqu 2,1
EventlistWrite; UserEvent 1,2; NewKakuSend 2,On
EventlistWrite; UserEvent 1,2; VariableSet 2,1
EventlistWrite; UserEvent 1,2; VariableSet 7,1
EventlistWrite; UserEvent 1,2; VariableInc 5,1
EventlistWrite; UserEvent 1,2; TimerTrueRandom 1,10,60

EventlistWrite; UserEvent 1,3; BreakOnVarNEqu 6,7 !idem
EventlistWrite; UserEvent 1,3; BreakOnVarEqu 3,1
EventlistWrite; UserEvent 1,3; NewKakuSend 3,On
EventlistWrite; UserEvent 1,3; VariableSet 3,1
EventlistWrite; UserEvent 1,3; VariableSet 7,1
EventlistWrite; UserEvent 1,3; VariableInc 5,1
EventlistWrite; UserEvent 1,3; TimerTrueRandom 1,10,60

EventlistWrite; UserEvent 1,4; BreakOnVarLess 6,8 !idem
EventlistWrite; UserEvent 1,4; BreakOnVarEqu 4,1
EventlistWrite; UserEvent 1,4; NewKakuSend 4,On
EventlistWrite; UserEvent 1,4; VariableSet 4,1
EventlistWrite; UserEvent 1,4; VariableSet 7,1
EventlistWrite; UserEvent 1,4; VariableInc 5,1
EventlistWrite; UserEvent 1,4; TimerTrueRandom 1,10,60

EventlistWrite; UserEvent 1,5; BreakOnVarEqu 7,1 !er is deze ronde een lamp verwerkt en dus is de timer gezet
EventlistWrite; UserEvent 1,5; TimerSet 1,-1 !anders weer een timer 1 event aanmaken.
erik
 
Berichten: 58
Geregistreerd: 12 dec 2014, 18:04

Re: Random

Berichtdoor erik » 11 jan 2015, 13:56

Aanwezigheidssimulatie vervolmaken:
Als we thuis de lampen aandoen , doen we ze niet altijd allemaal aan. Soms vergeten we er een of twee. In dit voorbeeld gaan we soms 1 lamp vergeten:
Variable 5 werd gebruikt om bij te houden of we alle lampen gehad hebben.
ipv "EventlistWrite; Boot 1; VariableSet 5,0;"
gebruiken we "EventlistWrite; Boot 1; VariableRandom 5,0,2;" waardoor de startwaarde van de teller soms op 0 en soms op 1 staat.
Als er nu een lamp niet wordt verwerkt zal dit meestal één van de minst belangrijke zijn!
erik
 
Berichten: 58
Geregistreerd: 12 dec 2014, 18:04

Re: Random

Berichtdoor rwijbenga » 11 jan 2015, 22:01

Kan je de plugin's beschikbaar maken voor iedereen door ze onder het experimentele gedeelte plaatsen ? :mrgreen:
rwijbenga
 
Berichten: 344
Geregistreerd: 28 aug 2011, 14:58

Re: Random

Berichtdoor erik » 12 jan 2015, 11:15

rwijbenga schreef:Kan je de plugin's beschikbaar maken voor iedereen door ze onder het experimentele gedeelte plaatsen ? :mrgreen:

Waar is dat?
erik
 
Berichten: 58
Geregistreerd: 12 dec 2014, 18:04

Re: Random

Berichtdoor rwijbenga » 12 jan 2015, 18:51

Een sub forum hier op het forum...

viewforum.php?f=40

Staat bij het forum overzicht vrij onderaan boven het Engelse gedeelte.
rwijbenga
 
Berichten: 344
Geregistreerd: 28 aug 2011, 14:58

Re: Random

Berichtdoor erik » 14 jan 2015, 17:36

En nu de praktijk in:
Eerder getoonde eventlist werkt prima met 4 lampen,maar in de praktijk zijn het meestal veel meer lampen. In mijn geval 12!
De eventlist wordt dan wel erg lang:
Van alle UserEvents dus een scriptfile maken.

Maar voor iedere lamp gebruikten we een variable om de status "wel/niet verwerkt" bij te houden.
En zoveel variables hebben we niet!

Dus ging BarbaPapa weer aan de toetsen voor de volgende BarbaTruc, sorry Plugin:

/*********************************************************************************************\
* Deze plugin bewaart 28 binaire switches in een variable.
*
* BinarySwitch Var1, Var2, Par1, Par2
*
* Var1 geeft de variable aan waarin de switches worden bewaard.
* Var2 geeft eventueel de variable aan waarin het test resultaat (0|1) wordt gezet.
* Par1 is het nummer van de bit (=switch).
* Par2 bepaald de aktie: 1 = setten, 2 = resetten, 3 = testen
*
* BinarySwitch 1, 2, 20, 1 === Switch 20 wordt aangezet in Variable 1
* BinarySwitch 1, 2, 20, 2 === Switch 20 wordt uitgezet in Variable 1
* BinarySwitch 1, 2, 20, 3 === Variable 2 bevat de waarde van de switch nummer 20

voorbeeld uit oude script:
BreakOnVarEqu 1,1
NewKakuSend 1,On
VariableSet 1,1

wordt nu:
BinarySwitch 15,2,1,3
BreakOnVarEqu 2,1
NewKakuSend 1,On
BinarySwitch 15,2,1,1
erik
 
Berichten: 58
Geregistreerd: 12 dec 2014, 18:04


Keer terug naar Nodo scripts

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers. en 1 gast

cron