Skip to content

Instantly share code, notes, and snippets.

@jdevoo
Created April 27, 2012 10:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jdevoo/2508249 to your computer and use it in GitHub Desktop.
Save jdevoo/2508249 to your computer and use it in GitHub Desktop.
Pachube R Functions
library(rjson)
library(RCurl)
Pachube.query <- function(feed='504')
{
json<-getURL(
paste('http://api.pachube.com/v2/feeds/',feed,sep=''),
netrc='optional')
data<-fromJSON(json)
if (data$private == "true" || !is.null(data$error)) stop(data)
return (sapply(data$datastreams,"[[",i="id"))
}
Pachube.fetch <- function(feed='504',datastream='0',hours=6)
{
max_range=c(0,6,12,24,5*24,14*24,31*24,90*24,180*24,365*24,365*24)
max_value=c(0,30,60,300,900,3600,10800,21600,43200,84600)
interval=max_value[max(which(max_range<hours))]
start=format(Sys.time()-hours*3600+60,"%Y-%m-%dT%H:%M:%OSZ",tz="UTC")
pages=ceiling(hours*3600/max(1,interval)/1000)
res=matrix(nrow=0,ncol=2)
for (p in 1:pages) {
json<-getURL(paste(
'http://api.pachube.com/v2/feeds/',feed,
'/datastreams/',datastream,
'?start=',start,
'&page=',p,
'&per_page=1000',
'&interval=',interval,
sep=''),netrc='optional')
data<-fromJSON(json)
if (!is.null(data$error)) stop(data)
if (length(data$datapoints)==0) break
m<-matrix(unlist(data$datapoints),ncol=2,byrow=T)
res<-rbind(res,m)
}
return (data.frame(
ts=strptime(res[,2],"%Y-%m-%dT%H:%M:%OS",tz="UTC"),
val=as.numeric(res[,1])))
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment