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"