[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 488: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 488: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 488: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 488: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 488: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 488: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 488: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 488: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 488: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 488: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 488: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 488: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 488: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 488: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 488: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 488: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 488: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 488: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 488: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 488: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 488: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 488: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 488: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 488: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 488: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 488: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 112: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/functions.php on line 4762: Cannot modify header information - headers already sent by (output started at [ROOT]/includes/functions.php:3897)
[phpBB Debug] PHP Warning: in file [ROOT]/includes/functions.php on line 4764: Cannot modify header information - headers already sent by (output started at [ROOT]/includes/functions.php:3897)
[phpBB Debug] PHP Warning: in file [ROOT]/includes/functions.php on line 4765: Cannot modify header information - headers already sent by (output started at [ROOT]/includes/functions.php:3897)
[phpBB Debug] PHP Warning: in file [ROOT]/includes/functions.php on line 4766: Cannot modify header information - headers already sent by (output started at [ROOT]/includes/functions.php:3897)
nodo-domotica.nl • Toon onderwerp - Random - Afdrukweergave
nodo-domotica.nl
http://www.nodo-domotica.nl/forum/

Random
http://www.nodo-domotica.nl/forum/viewtopic.php?f=24&t=2314
Pagina 1 van 1
Auteur:  erik [ 01 jan 2015, 15:29 ]
Titel:  Random

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
Auteur:  erik [ 09 jan 2015, 18:09 ]
Titel:  Re: Random

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.
Auteur:  erik [ 11 jan 2015, 12:47 ]
Titel:  Re: Random

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.
Auteur:  erik [ 11 jan 2015, 13:56 ]
Titel:  Re: Random

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!
Auteur:  rwijbenga [ 11 jan 2015, 22:01 ]
Titel:  Re: Random

Kan je de plugin's beschikbaar maken voor iedereen door ze onder het experimentele gedeelte plaatsen ? :mrgreen:
Auteur:  erik [ 12 jan 2015, 11:15 ]
Titel:  Re: Random

Auteur:  rwijbenga [ 12 jan 2015, 18:51 ]
Titel:  Re: Random

Een sub forum hier op het forum...

viewforum.php?f=40

Staat bij het forum overzicht vrij onderaan boven het Engelse gedeelte.
Auteur:  erik [ 14 jan 2015, 17:36 ]
Titel:  Re: Random

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
Pagina 1 van 1 Alle tijden zijn GMT + 1 uur