- PagerDuty /
- Blog /
- Non classé /
- Intégration Arduino YUN DIY pour les alertes PagerDuty
Blog
Intégration Arduino YUN DIY pour les alertes PagerDuty
En utilisant un peu d'inspiration de code provenant du Lampe Gmail , Daniel Gentleman de Thoughtfix ( @Thoughtfix ) a créé une intégration Arduino PagerDuty exceptionnelle en combinant un Arduino YUN, une sphère imprimée en 3D et l'anneau Neopixel d'Adafruit pour visualiser l'état de son tableau de bord PagerDuty . Découvrez-le dans la vidéo de son appareil (et de son chat) en action ci-dessous :
Grâce à l'API de PagerDuty, l'appareil consulte PagerDuty toutes les 15 secondes pour mettre à jour son état. L'appareil est configuré pour afficher à la fois les alertes acquittées et déclenchées. Lorsqu'il détecte des alertes acquittées ou déclenchées, le globe devient orange puis rouge, émettant une brève pulsation orange. Daniel précise que cette opération est intentionnelle pour indiquer la présence d'alertes dans les deux états, mais que le voyant reste rouge pendant un cycle de 15 secondes pour indiquer l'état le plus critique. Une fois toutes les alertes résolues, le voyant s'allume en vert.
Maintenir la fiabilité de l'intégration
Comme beaucoup de projets DIY, la lampe d'état PagerDuty était initialement un projet ludique. Mais Daniel a compris que cette lampe répondait à un réel besoin : un signal visuel rapide pour ses incidents en cours, qui pourrait à l'avenir servir de signal visuel pour que les autres le laissent tranquille lorsque sa lampe est rouge. Pour fiabiliser l'intégration, Daniel a ajouté une fonction simple à l'Arduino pour vérifier la présence du Wi-Fi et garantir une connexion permanente.
En créant un script shell ping -c 1 dans le répertoire personnel et en englobant les appels à l'API PagerDuty dans un test de ping, Daniel nous a expliqué que dans sa version finale, l'appareil envoie un ping à Bing.com toutes les secondes (beaucoup plus fréquemment que les appels à PagerDuty, qui ont lieu toutes les 15 secondes). En cas de perte de connexion, la lampe passe au bleu.
Possibilités futures
Étant donné que l'appareil utilise des scripts shell très simples et une broche d'E/S sur l'Arduino Yun, Daniel a expliqué qu'il est possible d'étendre cela pour montrer qui est de garde, faire changer les lumières en fonction de l'équipe qui a des alertes et même déplacer physiquement un robot en fonction des appels API PagerDuty .
Prêt à construire le vôtre ?
Voici ce dont vous aurez besoin :
- Arduino YUN : Nécessaire spécifiquement pour les commandes WiFi et curl.
- Anneau Neopixel d'Adafruit et bibliothèque – Contrôle LED attaché à la broche 6
- Sphère imprimée en 3D : Spécifications pour imprimer votre propre sphère et base
Code source :
// Ce code est destiné à une lampe d'état PagerDuty utilisant un Arduino Yun
// avec un anneau Adafruit NeoPixel (12 LED) sur la broche 6.
// Il nécessite trois fichiers dans le répertoire personnel de root :
// ack.sh (requête curl à l'API de PagerDuty pour vérifier les alertes reconnues)
// trig.sh (requête curl à l'API de PagerDuty pour vérifier les alertes déclenchées)
// cacert.pem (à partir de https://curl.haxx.se/ca/cacert.pem pour les requêtes SSL curl)
//
// Exemple ack.sh (changer status=acknowledged en status=triggered pour trig.sh
// curl -H « Type de contenu : application/json » -H « Autorisation : jeton »
token=[votre token]” -X GET -G –data-urlencode “status=acknowledged”
https://[YourPagerDutyURL]. pagerduty.com/api/v1/incidents/count
–cacert /root/cacert.pem
//// Obtenir un jeton API PagerDuty à partir de
https://[YourPagerDutyURL]. pagerduty.com/api_keys
#inclure<Adafruit_NeoPixel.h>
#définir le code PIN 6
#inclure<Process.h>
Bande Adafruit_NeoPixel = Adafruit_NeoPixel(12, PIN, NEO_GRB + NEO_KHZ800);
void setup() {
// Initialiser le pont
Pont.begin();
// Initialiser la série
Serial.begin(9600);// exécuter divers exemples de processus
bande.commencer();
strip.show(); // Initialiser tous les pixels à 'off'
colorWipe(strip.Color(0, 0, 255), 50); // Bleu
délai(100);
}
boucle vide() {
int ackd = runAckd();
int trig = runTrigger();
si ((ackd == 0) && (trig == 0)){
colorWipe(strip.Color(0, 255, 0), 50); // Vert
}
si (ackd >= 1){
colorWipe(strip.Color(255, 153, 0), 50); // Orange
}
si (trig >= 1){
colorWipe(strip.Color(255, 0, 0), 50); // Rouge
}
délai(15000);
}
int runTrigger() {
Processus p;// Créez un processus et appelez-le « p »
p.runShellCommand(“/root/trig.sh”);// Vérifier les événements déclenchés
// Une sortie de processus peut être lue avec les méthodes de flux
while (p.running()); // ne rien faire jusqu'à ce que le processus soit terminé, donc
vous obtenez l'intégralité du résultat
int result = p.parseInt(); /* rechercher un entier */
Serial.print(“Triggered:”); /* Quelques opérations de débogage série */
Serial.println(résultat);// Assurez-vous que le dernier bit de données est envoyé.
Serial.flush();
renvoyer le résultat ;
}
int runAckd() {
Processus p;// Créez un processus et appelez-le « p »
p.runShellCommand(“/root/ack.sh”);// Vérifier les événements déclenchés
// Une sortie de processus peut être lue avec les méthodes de flux
while (p.running()); // ne rien faire jusqu'à ce que le processus soit terminé, donc
vous obtenez l'intégralité du résultat
int result = p.parseInt(); /* rechercher un entier */
Serial.print(“Ackd:”); /* Quelques opérations de débogage série */
Serial.println(résultat);// Assurez-vous que le dernier bit de données est envoyé.
Serial.flush();
renvoyer le résultat ;
}
void colorWipe(uint32_t c, uint8_t wait) {
pour(uint16_t i=0; i
bande.setPixelColor(i, c);
bande.show();
retarder(attendre);
}
}
Vous avez un projet PagerDuty à réaliser vous-même ? Contactez-nous par e-mail. support@pagerduty.com .

