web-dev-qa-db-fra.com

Analyser JSON, XML ou CSV avec IFTTT?

J'aimerais créer une action IFTTT qui permette des déclencheurs basés sur un certain seuil de prix de l'électricité. Ce Xively feed peut renvoyer le prix actuel au format JSON, XML ou CSV . La référence API de Xively est ici .

Existe-t-il un canal/outil IFTTT qui me permette de lire une valeur unique et d’agir en conséquence à partir de l’un de ces formats? Ou existe-t-il une solution de contournement que je peux utiliser pour traduire les données afin de les utiliser avec un canal qui pourrait ne pas le permettre directement?

2
glenviewjeff

Sur la base de Réponse de l'Homme Normal , j'ai créé un script de feuille Google qui analysera et enverra par courrier électronique IFTTT en fonction d'un seuil de prix. Les cellules de feuille Google ne mettent pas à jour ImportXml() ou d'autres données de site externes plus d'une fois par heure environ, même en utilisant des solutions de contournement. Cependant, accéder aux sites externes via le script fonctionne. Utilisez le script suivant et configurez un déclencheur pour qu'il s'exécute toutes les minutes.

J'ai contourné le flux Xively et suis passé directement à source à Comed, car j'écris le script d'analyse. Il semble n'y avoir aucun canal d'analyse XML/CSV/JSON à ce jour sur IFTTT.

Personnalisez le seuil (actuellement 5.0) à votre guise. Vous pouvez également modifier le code et utiliser des balises de hachage dans le sujet pour créer des actions plus complexes dans IFTTT en fonction de différents seuils de prix. Par exemple, si le prix est supérieur à 5, vous pouvez baliser le courrier électronique #MEDIUM_PRICE et régler votre thermostat sur 78 degrés. S'il était> 10, vous pouvez le marquer #HIGH_PRICE et régler votre thermostat sur 82 degrés.

function myFunction() {
  var lastPriceCell = getThisCell(1,1);
  var lastPrice = lastPriceCell.getValue();
  var currentPrice = getPrice();
  var threshold = 5.0;
  var notify = false;

  if(currentPrice==null) {
    currentPrice = lastPrice;
  } else {
    // Notify only if last price was below threshold and current price is above threshold
    if(lastPrice <= threshold && currentPrice > threshold)
      notify = true;
  }
  lastPriceCell.setValue(currentPrice);

  if(notify) {
    var text = "Price Alert!" + currentPrice; 
    MailApp.sendEmail("[email protected]", text, text);
  }
}

function getThisCell(i, j) {
  return SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getRange(i,j);
}

function getPrice() {
  var price = (/([\d\.]+)]]/).exec(getData());
  if(price!=null) 
    return price[1];
}

function getData() {
  return UrlFetchApp.fetch("https://rrtp.comed.com/rrtp/ServletFeed?type=pricechartfiveminute");
}
3
glenviewjeff

Ma suggestion:

  1. Créez une feuille de calcul Google avec ImportData (pour CSV), ImportXML (pour XML) ou ImportFeed (pour RSS/Atom). Il existe un astuce pour la mettre à jour plus souvent que la valeur par défaut de Google (quelle qu’elle soit).

  2. Ayez un script Google Apps comparant les données d'une cellule donnée à un seuil donné. Il peut fonctionner toutes les heures et envoyer un courrier électronique si nécessaire.

Par exemple, vous pouvez supprimer la page xively susmentionnée avec les commandes de feuille de calcul suivantes:

  A1 =IMPORTXML("https://personal.xively.com/feeds/4014","//script[3]")
  B1 =REGEXEXTRACT(A2,"current_value[^,]*")
  C1 =VALUE(REGEXEXTRACT(B1,"[\d.]+"))

La cellule C1 contient 2.6 dès maintenant.

2
user79865