# Honey | [Outdated] Examples

This pages shows various examples of Honey programs.

In theses example, the dataset is supposed to be loaded in the signal variables $X, $Y and $Z. The result of the operation is stored in the signal variable $OUT. The intermediate signal variables are $A, $B, $C, $D, etc.

#### Compute a tailing simple moving average of a signal with a window of 50 time units.

$OUT = sma $X 50

#### Compute a simple moving average of a signal with a time window of 5 hours (supposing that one time unit is a second).

$OUT = sma $X =3600,5,*

#### Compute a tailing simple moving average of a signal with a window of 50 time units. Update the value every 10 time unit.

$A = tick 10

$OUT = sma $X 50 trigger:$A

$OUT = sma $X 50 trigger:$A

This is equivalent to

$A = tick 10

$B = sma $X 50

$OUT = sample $B trigger:$A

$B = sma $X 50

$OUT = sample $B trigger:$A

#### Compute a centered simple moving average of a signal with a window of 50 time units (Static mode only).

$A = echoPast $X 25

$OUT = sma $A 50

$OUT = sma $A 50

#### Compute the mean, median, minimum, maximum, range, range 90% and standard deviation of a signal over the last 10s.

$OUT = windowfeatures $X 10

#### Generate calendar events in the current time zone (days, week, months) while supposing that the time is the Unix time (number of seconds since the 1st jan 1970).

$OUT = calendar produce:hours,days,months

#### Downsample a signal to a maximum of one update every 10 seconds.

$OUT = skip $X 10

#### Add the value of two signals.

$OUT = eq $X "value,arg1,+" arg1:$Y

#### Let the signal $X passes only if the value of $Y is between 10 and $Z.

$OUT = passIf $X "10,arg1,>,arg2,arg1,<,*" arg1:$Y arg2:$Z

#### Remove all the values below 5.

# The two solutions are equivalent. The first solution is faster to compute.

$OUT = passIfFast $X minValue:5

$OUT = passIf $X "value,5,>"

$OUT = passIfFast $X minValue:5

$OUT = passIf $X "value,5,>"

#### Generate a signal if an event $X is followed by an event $Y, which is followed by an event $Z such that there is not more than 5 seconds between $X and $Y, and no more than 10 seconds between $Y and $Z.

$X_A = active $X 5

$A = passIf $Y "arg1" arg1:$X_A

$A_A = active $A 10

$OUT = passIf $Z "arg1" arg1:$A_A

$A = passIf $Y "arg1" arg1:$X_A

$A_A = active $A 10

$OUT = passIf $Z "arg1" arg1:$A_A

#### Count the number of times the numerical derivative of $A, computed over the last 0.1 time units, was negative and had become positive (cross up 0) in the last 10 seconds.

# tma is a good stable smoothing function for derivation (better than sma).

$A = tma $X 0.1

$B = derivative $A

$C = layer $B min:0 max:0 step:1 exclude:state

$D = filter $C ".*crossup.*"

$OUT = count $D 10

# Note: Only one temporary signal variable can actually be used. The following example is equivalent. Note that it is generally a good idea to keep, save and visualise intermediate results for debug.

$A = tma $X 0.1

$A = derivative $A

$A = layer $A min:0 max:0 step:1 exclude:state

$A = filter $A ".*crossup.*"

$OUT = count $A 10

$A = tma $X 0.1

$B = derivative $A

$C = layer $B min:0 max:0 step:1 exclude:state

$D = filter $C ".*crossup.*"

$OUT = count $D 10

# Note: Only one temporary signal variable can actually be used. The following example is equivalent. Note that it is generally a good idea to keep, save and visualise intermediate results for debug.

$A = tma $X 0.1

$A = derivative $A

$A = layer $A min:0 max:0 step:1 exclude:state

$A = filter $A ".*crossup.*"

$OUT = count $A 10

#### Compute the average value of $A by day i.e. Produce a value each day at midnight.

$A = sma $A =3600,24

$B = calendar produce:days

$C = filter $B event.day_is_.*

$OUT = sample $A trigger:$C

$B = calendar produce:days

$C = filter $B event.day_is_.*

$OUT = sample $A trigger:$C

#### Compute a details report of the number of event $A according to the day of the week. Sort the results according of the day of the week.

$A = calendar produce:days

$B = filter $A state.day_is_.*

report_histIntersectEventState event:$A state:$B sortBy:name file:"hist_day_name.txt"

$B = filter $A state.day_is_.*

report_histIntersectEventState event:$A state:$B sortBy:name file:"hist_day_name.txt"

#### Compute a details report of the number of event $A according to the value of a scalar.

report_histIntersectEventState event:$A scalar:$B file:"report.txt"

#### Generate an event at every heart beat from an EKG signal.

# The input is $EKG, the output will be $BH

$R1 = range $EKG 0.02

$R2 = range $EKG 4

$D = div $R1 $R2

$D2 = sma $D 0.02

$L = layer $D2 min:0.3 max:0.3 step:1 exclude:state

$L2 = filter $L .+crossup.+

$BH = rename $L2 event.HeartBeat

$R1 = range $EKG 0.02

$R2 = range $EKG 4

$D = div $R1 $R2

$D2 = sma $D 0.02

$L = layer $D2 min:0.3 max:0.3 step:1 exclude:state

$L2 = filter $L .+crossup.+

$BH = rename $L2 event.HeartBeat

#### Load a file from the script (and not from the command line argument).

# Load a.bin in memory, and define %output = "out.bin"

AUTODATASET input:"a.bin" output:"out.bin"

# Load a.bin and b.bin in memory, and define %output = "out.bin"

AUTODATASET input:"a.bin,b.bin" output:"out.bin"

# Load a.bin in memory, define %output = "out_a.bin" and apply the script. Next, load b.bin in memory, define %output = out_b.bin and execute the script with the new data.

AUTODATASET input:"a.bin" output:"out_a.bin"

AUTODATASET input:"a.bin" output:"out_b.bin"

AUTODATASET input:"a.bin" output:"out.bin"

# Load a.bin and b.bin in memory, and define %output = "out.bin"

AUTODATASET input:"a.bin,b.bin" output:"out.bin"

# Load a.bin in memory, define %output = "out_a.bin" and apply the script. Next, load b.bin in memory, define %output = out_b.bin and execute the script with the new data.

AUTODATASET input:"a.bin" output:"out_a.bin"

AUTODATASET input:"a.bin" output:"out_b.bin"

#### Emit a beep every 200ms (Online mode only)

$A = tick 0.2

print $A every:true

beep $A pitch:750

print $A every:true

beep $A pitch:750

#### Emit a beep when a keyboard key is pressed (Online mode only)

$A = keyboard

print $A every:true

beep $A pitch:750

print $A every:true

beep $A pitch:750

#### Apply the titarl rules 1 2 and 3 from rules.xml, and output the rule id.

applyRules $INPUT_EVENT rulePath:"rules.xml" emitRuleId:true onlyIds:"1,2,3"