Fiquett.com News, Tech, Ideas, Life …

27Mar/120

WOW – SAB Goblin 700 – Evil Helicopter

Two amazing RC heli video's in one day, this one is almost unreal. Again left drooling...

www.ARKRC.com.au

27Mar/120

Gift ideas.. Anyone??? ;)

Still Drooling....

CineStar 3 Axis Gimbal from tabb firchau on Vimeo.

18Feb/120

Will “Mac” be removed from the Apple nomenclature?

Picture courtesy of Steven M Scotten: http://splicer.com/2011/10/05/steven-paul-jobs-1955-2011

Interesting article. My opinion, while they may focus on other technologies, I highly doubt "Mac" will ever be completely removed from the Apple nomenclature.

read the article here....

Tagged as: , , No Comments
16Feb/120

OSX Mountain Lion Announced


Today Apple announced their next iteration of Mac OS, OSX Mountain Lion. I will be downloading the preview soon, but initially it looks like they have incorporated some of the popular features from the iPad OS. Can't wait to try it out.

24Nov/110

Siri – “Start my car” [Video]

23Nov/110

Siri – Controls my car – Video Proof

Siri starts/stops my car:

Siri locks/unlocks my car:

23Nov/110

Siri – Controls My Car

Siri - Vehicle Start

Siri - Vehicle Start

Yes, it really does control my car! ;)

I created a new ruby plugin that is used by plamoni's "Siri Proxy", a proxy server for Apple's Siri assistant. This proxy server allows for the creation of custom plugins that can intercept recognized speech and perform virtually any function imaginable (programmable, scriptable).

The "Siri Proxy" plugin I wrote handles interaction with a php script that runs on my web server. The php script, which I developed months ago for personal use, allows me to send commands to my car which has a Viper SmartStart module installed.

Current commands accepted are: "Vehicle Arm", "Vehicle Disarm", "Vehicle Start", "Vehicle Stop", "Vehicle Pop Trunk", and "Vehicle Panic".

--UPDATE: Now it also responds to more conversational commands such as "Start my car", "Lock my car", "Pop my trunk", etc...

I may change the command wording a bit later.  This was just a proof of concept. We'll see.

Technical Details:

  • Siri Proxy & DNSMasq box - Ubuntu 11.04 Server VM
    Ruby 1.9.3
  • LAMP server - Ubuntu 10.04 LTS Server
Code:

More info upon request, demo video coming soon!

--UPDATE: Video Proof Can Be Found Here

--UPDATE 2: Video Proof With My Car

5Aug/110

Load Balancing Frustration – Arrrggghhh!!

21Jul/110

Nagios Plugin – Juice Box Midspan XP POE

This script checks the status of a SEI Juice Box XP Midspan power-over-ethernet (POE) injector via SNMP.

It provides information on Voltage, Temperature, Power Delivered, Power Allocated, and Power Available.

#!/usr/bin/perl -w
###########################################################################################################
##
## Filename: check_snmp_poe_juicebox_xp.pl
## Description: This script checks the status of a Juice Box XP mid-span power-over-ethernet (POE) injector.
## Author: Brandon Fiquett (brandon [at] fiquett [dot] com)
## Date: 2011-06-18
## Version: 1.0
##
############################################################################################################

## ----------------------------------------------------------------------------------------(Includes)-START

use strict;
use Getopt::Long;
use Net::SNMP;
use lib "/usr/local/nagios/libexec";

## ----------------------------------------------------------------------------------------(Includes)-END

## ----------------------------------------------------------------------------------------(Declarations)-START

## OIDs
my $juiceBoxMainSystemVoltage = "1.3.6.1.4.1.20364.3.1.2.1.0"; ## juiceBoxMainSystemVoltage (millivolts)
my $juiceBoxMainTemperature = "1.3.6.1.4.1.20364.3.1.2.2.0"; ## juiceBoxMainTemperature (Celsius)
my $juiceBoxMainPowerAvailable = "1.3.6.1.4.1.20364.3.1.2.3.0"; ## juiceBoxMainPowerAvailable
my $juiceBoxMainPowerDelivered = "1.3.6.1.4.1.20364.3.1.2.4.0"; ## juiceBoxMainPowerDelivered
my $juiceBoxMainAllocatedPower = "1.3.6.1.4.1.20364.3.1.2.5.0"; ## juiceBoxMainAllocatedPower
my $juiceBoxMainNetworkControllerFirmware = "1.3.6.1.4.1.20364.3.1.2.11.0"; ## juiceBoxMainNetworkControllerFirmware
my $juiceBoxMainSystemControllerFirmware = "1.3.6.1.4.1.20364.3.1.2.12.0"; ## juiceBoxMainSystemControllerFirmware

## ARGS
my $host = "";
my $timeout = 15;
my $community = "public";
my $type = "";
my $min_warning = -1;
my $max_warning = -1;
my $min_critical = -1;
my $max_critical = -1;
my $verbose = undef;
my $celsius = undef;

## Result Strings
my $result = "";
my $status = "";
my $snmp_result = undef;
my $exit_level = 0; ## OK
my $exit_code = "";
my $value = "";

sub CtoF { my $c = shift; $c =~ s/[^\d\.]//g; return (((9/5)*$c)+32); }

## ----------------------------------------------------------------------------------------(Declarations)-END

## ----------------------------------------------------------------------------------------(Main)-START

## ----------------------------------------------------------------------------------------(Get Args)-START

Getopt::Long::Configure ('no_ignore_case');
$result = GetOptions ('host|h=s' => \$host,
'timeout|t=i' => \$timeout,
'community|c=s' => \$community,
'type=s' => \$type,
'min_warning=i' => \$min_warning,
'max_warning=i' => \$max_warning,
'min_critical=i' => \$min_critical,
'max_critical=i' => \$max_critical,
'celsius' => \$celsius,
'verbose|v' => \$verbose);
sub usage {
my $ret = "USAGE $0 [options]\n";
$ret .= "-h --host\t\tNagios Macro: \$HOSTADDRESS\$\n";
$ret .= "-c --community\t\tSNMP Community String (Default: $community)\n";
$ret .= "-t --timeout\t\tTime out (Default: $timeout)\n";
$ret .= "--type\t\t\tType (voltage,temp,pwr_available,pwr_delivered,pwr_allocated)\n";
$ret .= "--celsius\t\tTemperature in Celsius\n";
$ret .= "--min_warning\t\tMin Warning\n";
$ret .= "--max_warning\t\tMax Warning\n";
$ret .= "--min_critical\t\tMin Critical\n";
$ret .= "--max_critical\t\tMax Critical\n";
$ret .= "\n";
return $ret;
}

## Verbose subroutine
sub verb { my $t=shift; print $t,"\n" if defined($verbose) ; }

alarm ($timeout + 1);

$SIG{'ALRM'} = sub {
print ("WARNING: Check Timed-out\n");
exit(3); ## UNKNOWN
};
if(not $result ) {
print "ERROR: Missing Need Parameters\n\n" . usage();
exit(3); ## UNKNOWN
}
if( $host eq "") {
die "ERROR: No host given\n\n" . usage();
exit(3); ## UNKNOWN
}

if( $type eq "") {
die "ERROR: No type given\n\n" . usage();
exit(3); ## UNKNOWN
}
## ----------------------------------------------------------------------------------------(Get Args)-END

## ----------------------------------------------------------------------------------------(Create new SNMP-session-object)-START

my($snmp_session, $error) = Net::SNMP->session( -hostname => $host,
-community => $community,
-timeout => $timeout,
);

if( ! defined $snmp_session) {
print "ERROR: Couldn't create snmp session: $error\n";
exit(3); ## UNKNOWN
}

## Set Timeout
$snmp_session->timeout($timeout);

## ----------------------------------------------------------------------------------------(Create new SNMP-session-object)-END

## ----------------------------------------------------------------------------------------(Request the actual values)-START

$snmp_result = $snmp_session->get_request( -varbindlist => [ $juiceBoxMainSystemVoltage,$juiceBoxMainTemperature,$juiceBoxMainPowerAvailable,$juiceBoxMainPowerDelivered,$juiceBoxMainAllocatedPower,$juiceBoxMainNetworkControllerFirmware,$juiceBoxMainSystemControllerFirmware]);
$snmp_session->close;

verb("Juice Box POE Midspan Power Hub Information\n##########################################################");
my $MainSystemVoltage = $snmp_result->{$juiceBoxMainSystemVoltage};
$MainSystemVoltage = $MainSystemVoltage / 1000;
verb("System Voltage (volts): $MainSystemVoltage");
my $MainTemperature = $snmp_result->{$juiceBoxMainTemperature};
$MainTemperature = CtoF($MainTemperature) if (! defined $celsius);
verb("Temperature (" . ((defined $celsius)?"°C":"°F") . "): $MainTemperature");
my $MainPowerAvailable = $snmp_result->{$juiceBoxMainPowerAvailable};
verb("Power Available (Watts): $MainPowerAvailable");
my $MainPowerDelivered = $snmp_result->{$juiceBoxMainPowerDelivered};
verb("Power Delivered (Watts): $MainPowerDelivered");
my $MainAllocatedPower = $snmp_result->{$juiceBoxMainAllocatedPower};
verb("Allocated Power (Watts): $MainAllocatedPower");
my $MainNetworkControllerFirmware = $snmp_result->{$juiceBoxMainNetworkControllerFirmware};
verb("Network Controller Firmware: $MainNetworkControllerFirmware");
my $MainSystemControllerFirmware = $snmp_result->{$juiceBoxMainSystemControllerFirmware};
verb("System Controller Firmware: $MainSystemControllerFirmware");
verb("##########################################################");

## Verifty no SNMP problems
if( (! defined $MainSystemVoltage) or ( ! defined $MainTemperature) or ( ! defined $MainPowerAvailable) or ( ! defined $MainPowerDelivered) or ( ! defined $MainAllocatedPower) or ( ! defined $MainNetworkControllerFirmware) or ( ! defined $MainSystemControllerFirmware)) {
print "SNMP ERROR in get-request: ".$snmp_session->error();
exit(3); ## UNKNOWN
}

## ----------------------------------------------------------------------------------------(Request the actual values)-END

## ----------------------------------------------------------------------------------------(Build the results)-START

if ($type eq "voltage"){
$value = $MainSystemVoltage;
$status = "Voltage ($MainSystemVoltage volts)";
}elsif($type eq "temp"){
$value = $MainTemperature;
$status = "Temperature ($MainTemperature " . ((defined $celsius)?"degrees C":"degrees F") . ")";
}elsif($type eq "pwr_available"){
$value = $MainPowerAvailable;
$status = "Power Available ($MainPowerAvailable Watts)";
}elsif($type eq "pwr_delivered"){
$value = $MainPowerDelivered;
$status = "Power Delivered ($MainPowerDelivered Watts)";
}elsif($type eq "pwr_allocated"){
$value = $MainAllocatedPower;
$status = "Power Allocated ($MainAllocatedPower Watts)";
}else{
$status = "ERROR: Not a valid type. (voltage,temp,pwr_available,pwr_delivered,pwr_allocated)";
exit(3); ## UNKNOWN
}
if (( $min_warning eq -1 && $min_critical eq -1) | ($max_warning eq -1 && $max_critical eq -1)){
$status = "ERROR: Missing threshold(s)";
$exit_level = 3; ## UNKNOWN
}else{
if (($min_critical ne -1 && $max_critical ne -1) && ($value = $max_critical)){
$exit_code = "CRITICAL " . (($value $exit_level = 2; ## CRITICAL
}elsif (($min_warning ne -1 && $max_warning ne -1) && ($value = $max_warning)){
$exit_code = "WARNING " . (($value $exit_level = 1; ## WARNING
}else{
$exit_code .= "OK";
}
}
## ----------------------------------------------------------------------------------------(Build the results)-END

## ----------------------------------------------------------------------------------------(Main)-END

## ----------------------------------------------------------------------------------------(Exit)-START

print "$status: $exit_code \n";
exit($exit_level);

## ----------------------------------------------------------------------------------------(Exit)-END

Click here to download

21Jun/110

Quad-Copter – Update

I have been pretty busy and have not had much time to work on my quad-copter. Since my last post, I have made a few more test flights and now have wireless avionics via XBee modems working.

My next goal is to upgrade the frame (ideas), attach video for FPV (GoPro HD) and integrate GPS (Google maps way-point control).

My new motivation c/o RCExplorer

For more on my Quad-Copter project, check it out here

Tweeter button Facebook button Digg button Flickr button Stumbleupon button Youtube button