• IO Updates - Trigger Webhook Response Templates

    update-banner

    Webhook response templates

    We’ve updated webhooks in triggers (both scheduled and reactive) to allow custom response templating. This feature now allows webhooks to properly post to many more endpoints, such as slack or discord. We’ve included a couple of basic templates to build from.

    The templates need to be valid json in order to work, and allow a few values to passed in such as {{feed_id}}, or {{feed_name}}.

    As an example, you could do something like this now:

    {
    
      "content": "The value: {{value}} for the feed:{{feed_name}} is too low."
    
    }
    

    trigger-ui


    Get in touch with us on the Adafruit IO forums or on Discord if you have any questions.

  • Adafruit IoT Monthly: BLE Store Capacity Indicator, Aquarium Automation, and more!

    IoT Projects

    BLE-based Crowd Indicator for Small Stores

    SmallStoreWarningBLE

    Smaller shops may not be able to hire extra employees to enforce or monitor social distancing. This solution by Ian Mercer tracks every Bluetooth Low Energy (BLE) device nearby to figure out when the store is busy. - Hackster

    PyPortal Home Office Busy Display

    PyPortalHomeOffice

    Diana Perkins (@diana_perkins) built a display using a PyPortal to show when someone in their home offices is busy. It’s controlled using a “rails app running on a machine on our local network so we can trigger it even if we already sat down for a meeting” - Twitter

    Mesh WiFi Music-Reactive Light System

    Glowfly

    GlowFly is a WiFi connected, programmable and music reactive light system. When multiple nodes are combined, it is possible to span a mesh of WiFi connected devices which are synchronously reacting to music. - HackaDay

    Electronic Security Lock using AWS Serverless

    ServerlessLockbox

    A small security lock you can text, powered by Amazon AWS Serverless. - Amazon

    Vision Alert System with Azure IoT Edge and Jetson Nano

    VisionAzureJetson

    Build a vision system using a NVIDIA Jetson Nano with a webcam and the Azure Custom Vision service. This project sends an email alert to your inbox if an image has been identified. - henkboelman

    Aquarium Automation with nRF52840

    FishTank

    Aquarium automation system using a Feather nRF52840 and four extra FeatherWings. There’s an automatic fish-feeder and Raspbery Pi based fishpi monitors for temperature and lights. Scripts used in this project are open-source and on GitHub -Twitter

    This Blog is Now Running on Solar Power

    Solarblog

    Lou Wrentius’ blog is now running on one solar panel and an old car battery. There’s a solar panel on his balcony “which is connected to a solar charge controller”. Clicking through to their blog, you can see a sidebar which shows the solar panel’s status. This widget runs on the same solar-powered Raspberry Pi which hosts the blog. If the weather is favorable, “the solar panel provides way more power than is required to keep the battery charged and run the Raspberry Pi”. -louwrentius

    Dawn and Dusk Porch Lights

    PorchLight

    WiFi-enabled Wemo switch to turn off a porch-light at dawn and dusk. This switch includes an intelligent scheduler which obtains the location-specific sunset and sunrise times from the internet. - HackaDay

    Wirelessly monitor G-Force from high-contact sports

    GForceHelmet

    Monitoring G-Force with a device attached to an ice-hockey helmet. Data is logged from the device to Adafruit IO. -Maker.io

    Solar Powered Weather Station

    SolarWeatherStation

    Mark Komus built a solar-powered weather station that reports its recorded data to Adafruit IO, our easy-to-use IoT platform for everyone. A BME280 sensor monitors temperature, pressure and humidity. Sparkfun’s weather gauges are mounted at the top of the metal pole. - Adafruit

    IoT News and More!

    Use intent parsers to program your first voice AI

    intentparserapi

    Programming a voice assistant for open-source home automation projects using the Mycroft voice assistant API. - OpenSource

    New “Works with Google” program is Similar to Apple HomeKit

    staceyoniot

    StaceyOnIoT points out that the new “Works with Google” program for smart-home devices is similar to Apple HomeKit, both services rope users into an vendor-specific ecosystem. - StaceyOnIoT

    Alexa Connect Kit (ACK) Chipset Released

    staceyoniot

    Amazon detailed a new Espressif-powered chipset which enables “WiFi, Bluetooth LE and all the software needed for Alexa control”. - Amazon

    Adafruit IO

    Adafruit IO Update: New Trigger Functionality

    AIO Trigger Update

    The Adafruit IO team has released some changes to Adafruit IO, our easy-to-use-internet of things platform. First is an update to Scheduled Triggers. Scheduled triggers now have a much more robust option to scheduling. If you’re familiar with cron scheduling, you’ll be familiar with this new system. You can schedule based on a number of new time and date options.

    We’ve also added the ability for reactive triggers to email a value based on the feed that is being acted on, or now you can also update the value of any of your feeds from that trigger. For example, if the ‘humidity’ in your house is > 50%, you could update another, ‘dehumidifier’ feed to set the value to “ON”.

    Finally, we’ve made further system changes that should improve the performance of Adafruit IO for all users.

    Read more about all the changes here…

    Adafruit IO Stats

    AIO Stats

    Adafruit IO has 338,708 total users! Here are the interesting stats from the last 30 days:

    • Total Feeds: 529,571 (and counting!).
    • There are over 17,000 feeds online as of time of writing (July 30 2020).
    • There are an average of 4,000+ MQTT connections active 24/7.

    Sign up for Adafruit IO (for free!) by clicking this link. Ready to upgrade? Click here to read more about Adafruit IO+, our subscription-based service. We don’t have investors and we’re not going to sell your data. When you sign up for Adafruit IO+, you’re supporting the same Adafruit Industries whose hardware and software you already know and love! You help make sure we’re not going anywhere by letting us know we’re on the right track.

  • IO Updates - Trigger Webhook Updates

    update-banner

    Scheduled Triggers Update

    We’ve updated scheduled triggers to support webhooks. You can now choose where to post your data, as well as which feed value is posted.

    Reactive Triggers Update

    We’ve also updated the webhook functionality on reactive triggers and now you can choose which feed is posted. Previously the only option was to post the value of the feed being reacted upon, but now any feed is available as an option to post the value to your destination.

    trigger-ui


    Get in touch with us on the Adafruit IO forums or on Discord if you have any questions.

  • IO Updates - New Trigger Functionality

    update-banner

    Hello IO community! Over the last few weeks we’ve released some changes to Adafruit IO that should be useful to everyone using the platform.

    Scheduled Triggers Update

    Scheduled triggers now have a much more robust option to scheduling. If you’re familiar with cron scheduling, you’ll be familiar with this new system. You can schedule based on a number of new time and date options. Previously we allowed scheduling based on increments such as 30 minutes, or 1 week. We now allow thing such as “Tuesdays at 9pm” or “At 2:00 PM, only on Friday”, or “Every 4 hours”, or “At 1:00 PM, every 7 days”.

    In addition, scheduled triggers will now account for your time zone if you set it in your Adafruit Account profile. The default time zone is UTC.

    Also, previously the only action option was to have a value emailed. We’ve now also added the ability for scheduled triggers to update another feed. An example of this would be to update a feed every 30 minutes with a “RESET” value to reset a system. There are many different possibilities!

    trigger-ui

    Reactive Triggers Update

    We’ve also added the ability for reactive triggers to email a value based on the feed that is being acted on, or now you can also update the value of any of your feeds from that trigger. For example, if the ‘humidity’ in your house is > 50%, you could update another, ‘dehumidifier’ feed to set the value to “ON”.

    We think these updates are going to be quite useful, and are excited to see what you can come up with. This was a very large change in our system, and we anticipate there could be bugs here and there. Please feel free to report any bugs or issues you run across in our forum.

    Trigger Changes

    We’ve also made a few changes that span both triggers.

    Triggers will be automatically disabled if they fail 5 times in a row. A failure could happen for any number of reasons, but we will add a new message to the triggers to let you know why they failed, as well as email you that the trigger has been disabled.

    Emails are now limited to IO+ users (scheduled triggers created before 2020/07/14 are grandfathered and will remain active). This is largely because it costs us money to send emails. Reactive Trigger emails were always IO+ only, but we’ve expanded this to scheduled triggers as well (now that scheduled triggers have the ability to publish to feeds, this is free for all users).

    Platform Upgrades

    We’ve made some further system changes that should improve the performance of IO for all users. It may not be noticeable, but we are continuing to upgrade our backend systems, and improve performance and stability.


    Get in touch with us on the Adafruit IO forums or on Discord if you have any questions.

  • Adafruit IO UPDATE: SSL/TLS Certificate Updated

    update-banner

    We have updated the Adafruit IO SSL/TLS certificate. If you are having issues connecting, please ensure you have the latest Adafruit IO Arduino library version by navigating to the Arduino Library Manager (from the Arduino IDE, navigate to: Sketch -> Include Library -> Manage Libraries):

    update-banner

    The certificate is fingerprinted in that library and you will have issues connecting if that library is out of date. The current version with the latest fingerprint is 3.7.0. There also an example that was updated in the Adafruit MQTT Library, we’ve updated this library too.

    If you are using an ATWINC1500 module, you’ll need to update the certificate built into the module. Please follow these instructions on this Learning System Guide for step-by-step instructions…

    In the future, we will announce this much further in advance to ensure everyone is aware of the scheduled certificate updates to reduce downtime. The next update will be in approximately 2 years.

    If you had any significant downtime or are having issues getting connected again, please reach out to us and we can assist you.

  • Adafruit IoT Monthly: Repurposed Smart Home Displays, Open-Source 5G Networks, and more!

    IoT Projects

    Microcontroller-based Star Trek TNG operational display

    TNG

    Darian Johnson built a Star Trek: The Next Generation inspired terminal that displays the weather, indoor temperature, volatile organic compound strength, fitness information, and more. This is one of the nicest-looking personal smart-terminals we’ve seen and even features a resistor color-code chart and a current measurement tool. - HackADay

    Fermenters Friend – Home Brewing Temperature Monitor

    FermenterFriend

    After making a brew, one needs to “let it ferment, trying to control the temperature range from an ideal of around 18-22 C”. They used a Cheeseboard ESP8266 development board to monitor the brew’s temperature as it ferments and display it on a LCD and online. - Adafruit

    Vintage Terminal Home Automation Home

    VintageSmartTerminal

    Repurposing a ADM-3A terminal as a home automation hub and display. - HackADay

    DIY Alexa-Controlled Air Conditioner

    AlexaAC

    Summer is heating up in the United States and this DIY solution allows you to simulate the IR commands of an air conditioner remote control using an ESP8266. The ESP8266 is connected to HTTP/AWS so it can receive and translate Alexa commands to control your air conditioner. - EspressIf

    Kindle Home Assistant Interface

    KindleHomeDisplay

    Repurpose your kindle as an e-ink display for your Home Assistant setup. -GitHub

    Minecraft Friend Notification Sign

    MinecraftDisplay

    This internet-connected sign lights up whenever your friends are online in your favorite Minecraft server. - Youtube

    ESP32 Micropython Sensor and Web Server

    ESP32Server

    ESP32-powered MicroPython sensor node also serves temperature data on its own web server. How2Electronics

    IoT News and More!

    free5GC - an Open-Source 5G Mobile Core Network

    free5gc

    The free5GC project is building an open-source 5G mobile core (5GC) network. - Free5GC

    ClusterDuck Protocol - LoRa, WiFi, and Bluetooth Mesh Network

    clusterduck

    The ClusterDuck Protocol is an open source firmware for mesh network internet-of-things devices based on LoRa radio and can include WiFi and Bluetooth compatibility. This is an interesting potential alternative for Particle’s IoT BLE Mesh users. - ClusterDuck

    GNUHealth in a Box: Deploying hospital health systems with a Raspberry Pi

    GNUHealth

    GNU Health, a “health and hospital information system” now has an image which can be installed on Raspberry Pi’s in remote areas without internet, nursing homes or laboratories. - GNUHealth

    Adafruit IO Stats and more!

    AIO Stats

    Adafruit IO has 332,834 total users! Here are the interesting stats from the last 30 days:

    • Total Feeds: 516,432 (and counting!).
    • There are over 17,600 feeds online as of time of writing (June 25, 2020).
    • There are an average of 4,605 MQTT connections active 24/7.

    Sign up for Adafruit IO (for free!) by clicking this link. Ready to upgrade? Click here to read more about Adafruit IO+, our subscription-based service. We don’t have investors and we’re not going to sell your data. When you sign up for Adafruit IO+, you’re supporting the same Adafruit Industries whose hardware and software you already know and love! You help make sure we’re not going anywhere by letting us know we’re on the right track.

  • Adafruit IoT Monthly: Cosmo Clock, Low Powered Widlife Camera, and more!

    IoT Projects

    Weather Station Planter

    Weather Station Planter

    A different type of weather station this month - a planter which simulates the real-time weather of a location by changing the colors of the planter. - HackADay

    Completely Automated M&M Launcher - Voice Activated Using Alexa

    M&M Launcher

    To keep busy during quarantine, Harrison McIntyre built a fully automated M&M candy launcher which is activated using Amazon Alexa. This launcher can perform facial detection using computer vision and launches M&M’s into your mouth. - YouTube

    Cosmo Clock

    cosmo clock

    This clock changes color every time a new astronaut enters space. - Instructables

    officeAir: A Google Sheets Logger with Raspberry Pi

    officeAir Logger

    This project lets you easily log temperature and humidity data via Raspberry Pi and a sensor. It logs data to Google Sheets, collecting the raw data and automatically drawing a nice chart as data coming in. - GitHub

    Low-Power Wildlife Trail Camera

    Wildlife Trail Camera

    DIY motion-activated camera module takes photos of wildlife and stores them on a microSD card. -MarksBench

    METAR Temperature Data Display Using ESP8266

    Metar Display

    An ESP8266 (NodeMCU) requests online METAR data from 9 stations in a cyclical (rotating) manner, and displays their decoded temperatures on 7-segment displays. - YouTube

    Laundry Monitor

    Laundry Monitor

    This project senses the current of your washer and sends a SMS when the wash cycle finishes. This project is different than the usual laundry monitoring project since it’s reliable and does not require disassembling appliances. - HackADay

    Smart Pill Dispenser

    Smart Pill Dispenser

    The Smart Pill Dispenser is a machine that will give your grandparents the pills they need, when the need it and in case they’ll forget - you will get a notification about that! - Instructables

    BLE Notification Vibration Bracelet

    BLE bracelet

    A wearable bracelet which buzzes when you’ve received notifications from an iOS device using an Adafruit Feather Sense and DRV2605L breakout. - Adafruit Learning System

    IoT News and More!

    Video inside a Self-Driving Tractor Cab

    modern tractor cab

    Have you ever wondered what it’s like to be in the cab of a tractor on a farm? Imagine it’s a steering wheel and a radio? Modern agriculture is a bit more complex and awesome these days. - YouTube

    Want a radio service operator license? FCC starts offering radio licensing exams remotely

    folding

    During the pandemic, the FCC announced that ham radio licensing exams can be administered remotely. -swling

    The Services Shakedown: Wink Hardware transitions to a monthly subscription

    service shakedown

    Wink Labs announced their home automation hub, the Wink Hub, is transitioning to a monthly subscription of $4.99 per month. If someone fails to pay this fee, device unfortunately loses most of its functionality. HackADay writer Elliot Williams discusses the ‘IoT Trap’ and wonders how people can avoid it. - HackaDay

    New Hardware: Teensy 4.1

    teensy4.1

    PJRC released the Teensy 4.1 which includes a blazing-fast IMXRT1062-based microcontroller with 10/100Mbit ethernet. - PJRC

    How the COVID-19 pandemic is spurring IoT growth while the world’s business slows

    iot-growth

    Kevin C. Tofel writes about the state of the expanding IoT market ‘as people look for health monitoring systems…and other remotely accessible products’. - StaceyOnIoT

    New Hardware: LilyGo T-Watch, ESP32 Watch

    smart watch esp32

    LilyGo released their T-Watch, a sub-$30 smart-watch based on the ESP32. LilyGo is supporting Arduino, MicroPython and Scratch programming languages. - Tindie

    Espressif Releases Apple HomeKit ADK

    homekit esp32

    Makers can now use the HomeKit ADK for ESP32 to prototype non-commercial smart-home devices. -Espressif

    Adafruit IO Stats and more!

    AIO Stats

    Adafruit IO has 328,224 total users! Here are the interesting stats from the last 30 days:

    • USERS ACTIVE (30 days): 13,237
    • TOTAL FEEDS: 505,852
    • FEEDS CREATED (last 30 days): 13,793
    • There are about 4,200+ MQTT connections active 24/7.

    Sign up for Adafruit IO (for free!) by clicking this link. Ready to upgrade? Click here to read more about Adafruit IO+, our subscription-based service. We don’t have investors and we’re not going to sell your data. When you sign up for Adafruit IO+, you’re supporting the same Adafruit Industries whose hardware and software you already know and love! You help make sure we’re not going anywhere by letting us know we’re on the right track.

  • Adafruit IoT Monthly: Quarantine Clock, Smarter Than your Speaker, and More!

    IoT Projects

    PyPortal Quarantine Clock

    QuarClock

    Do you know what day it is? Perhaps you’re finding yourself losing track of time and your routine is suffering. The PyPortal Quarantine Clock has got you covered! It only displays the essential “stay-at-home” information - the current day and a rough estimate of the time. - Adafruit

    Smart Video Intercom System

    Intercom

    This Raspberry Pi-powered hardware notifies you when guests arrive and lets you talk to them on your phone through internet calls. - Hackster

    NerfOrNothing: Instrumenting a NERF Football

    NERFFootball Timothy Kanarsky and his team “cut a Nerf football in half, stuck a WiFi-enabled microcontroller and some accelerometers inside, and wrote some inertial-navigation code to track throw distance and spin rate”. - HackaDay.io

    Simple Home Alarm System

    AlarmSystem

    Need an alarm system for your home? Build one using only two components: an ESP32 and a 433MHz RF receiver. If you want to adapt this project to a different sensor - there’s (lots of different sensor types)[https://www.ebay.de/itm/193291348372] and devices operating on the 433MHz frequency available on the internet. - GitHub

    Add Coverage to your IoT Project with a Satellite Modem

    Rockblock

    Who’s got the best coverage map? Anyone using the Iridium satellite constellation, that’s who. How does whole Earth coverage sound? This guide shows you how to setup and use the Rock Seven RockBLOCK 9603 Iridium Satellite Modem. This hardware is tied to service that is also provided by Rock Seven. - Adafruit

    Reverse Engineering a Ceiling Fan Remote

    remote

    Reverse engineering a ceiling fan remote for home automation. - HackaDay

    Wearable Continuous Temperature Monitor

    Wearabletherm

    Hands-free temperature monitoring means you can sleep soundly. Data is sent to an Adafruit IO account for long-term storage and visualization. Use Adafruit IO Triggers to be notified by email when the temperature increases past a set threshold. -Adafruit

    Connected Weather Cloud Lamp

    weatherlamp

    This is a fun project that plays with how to visualize information using only light and sound. What better way to have some fun with this than to make an Internet connected cloud that connects to an open source weather API? - Adafruit

    Apollo Pi Thermal Camera

    thermal camera

    OldTechNewSpec repurposed a vintage Apollo microwave detector from 1979 as a thermal camera. It’s powered by a Raspberry Pi Zero with an AMG8233 thermal camera breakout, displaying the temperature on a 1.3″ TFT display. - Instructables

    IoT News and More!

    Behind the scenes of fighting coronavirus using GPUs

    folding

    Gamers are using their high-performance GPUs to participate in Folding@Home, helping to understand proteins interactions of SARS-CoV-2 virus that causes COVID-19. - HackaDay

    Stay Smarter than Your Smart Speaker

    smartspeaker

    Working at home on confidential projects? Your speaker may be spying on you. Kristina Panos outlines “the best practices of confidential work in earshot of these audio-triggered gadgets?”. - HackaDay

    83 Billion IoT Connections by 2024

    smartspeaker

    A new study from Juniper Research found that the total number of IoT connections will reach 83 billion by 2024, rising from 35 billion connections in 2020. - Juniper Research

    Solid, a New Approach to the Web by Sir Tim Berners-Lee

    solid

    Solid is a new approach to decentralizing the Internet, led by Sir Tim Berners-Lee. - Solid

    Demand for Sharp’s Face Masks Crash Servers and Air Conditioners

    sharp

    Sharp’s online store server went down, taking smart gadgets including air conditioners with it. - The Verge

    New ESP32 AI Development Board, ESP32-Korvo

    korvo

    ESP32-Korvo is Espressif’s new AI development board. Equipped with a multi-microphone array, it can achieve high performance, spoken-command recognition and far-field voice wake-up. - EspressIf

    Are Insect Brains Better for Neural Computing than Human Brains?

    insectbrains

    We model existing neural networks based on human brains to replicate human intelligence. Tasks like navigation for driverless cars and drones have researchers wondering if they should focus on insect brains instead. - NetworkWorld

    The Advantage of LPWAN Chirp Technology

    lpwan

    Chirps are great for low power wide area networks (LPWAN) because they occupy a single dimension. Semtech’s Oliver Seller takes us through what chirps are and why they’re useful for LoRa-based signal modulation. - SemTech

    Adafruit IO Stats and more!

    AIO Stats

    Adafruit IO has 323,646 total users! Here are the interesting stats from the last 30 days:

    • USERS ACTIVE (30 days): 13,553
    • TOTAL FEEDS: 495,048
    • FEEDS CREATED (last 30 days): 14,281
    • There are about 4,200+ MQTT connections active 24/7.

    Sign up for Adafruit IO (for free!) by clicking this link. Ready to upgrade? Click here to read more about Adafruit IO+, our subscription-based service. We don’t have investors and we’re not going to sell your data. When you sign up for Adafruit IO+, you’re supporting the same Adafruit Industries whose hardware and software you already know and love! You help make sure we’re not going anywhere by letting us know we’re on the right track.

  • Adafruit IoT Monthly: Together we’ll make it, Upcycled IoT Display, ESP32-S2 in the Wild and More!

    A note from the editor - We’ll make it together

    COVID19

    Phil and Ladyada here, we usually do the newsletter each week, this week are diverting all our attention to efforts in NYC and awhile the world to help combat the COVID-19 outbreak. Thank you community for keeping us strong, and thank you Adafruit team for running the newsletter for now.

    Adafruit was deemed an essential manufacturing, service and business in NYC by – Executive Order 202.6. We have a blog post with an overview and things are changing quick, stay tuned for updates on everywhere Adafruit is on social media - Read more.

    COVID19

    We are Shipping a limited number of orders for health care professionals / urgent needs only. All other orders are being held for now.

    Adafruit is a 100% woman-owned, loan-free, VC-free. profitable, USA Manufacturing company. Please see our about page and press page to read about us. Our founder and lead engineer is Limor Fried, a MIT Electrical Engineer.

    We have paused some operations in NYC due to COVID-19, we are paying all team members, contractors, and more.

    There are no layoffs for 130+ Adafruit team members. Adafruit was deemed an essential service to distribute/make some PPE (Personal Protection Equipment) such as face shields, and manufacturer electronics for essential life-saving/preserving equipment and development which is needed in New York and beyond.

    Adafruit Industries located at 150 Varick Street, New York, NY 10013 by Executive Order 202.6, “Essential Business” by New York State: https://esd.ny.gov/guidance-executive-order-2026

    Adafruit provides the following services:

    Medical equipment/instruments including:
    Warehouse/distribution and fulfillment

    Essential manufacturing including:
    Microelectronics/semi-conductor

    Essential health care operations including:
    Medical supplies and equipment manufacturers and providers

    We are maintaining some, but not all, business operations to assist in providing these valuable services to combat the COVID-19 outbreak.

    If you are working on COVID-19 related efforts, we are shipping.

    IoT Projects

    AvoRipe – Check your Avocado’s Ripeness

    avoripe

    Eden Bar-Tov built a device to check an avocado’s ripeness twice a day. If an avocado is ripe (AvoRipe checks both color and softness), a push notification will be sent to your phone notifying you that the avocado is ready to eat. - Adafruit

    Stay Informed: How to Pull your Own COVID-19 Data

    covid19api

    Tom Nardi wrote a guide on hackaday for pulling and scraping raw data about COVID19 from multiple data sources. If you’re building a way to monitor the total number of cases in your state or country, this guide provides reputable data sources along with Python code snippets. -HackaDay

    Upcycled Cassette IoT Display

    cassette

    Martin Mander, aka Old Tech. New Spec, gives life to obsolete technologies, usually by sticking a computer in them and connecting them to the internet. In this example of the upcycler’s craft, he’s turned a cassette (an ancient, rubbish way of recording music) into an IoT notification reader. - Adafruit

    Space Station Grow Box Replica

    space station

    m1st3r_c is building a replica of the plant grow-box used on the Internal Space Station for the Natural History Museum of London. - Adafruit

    Pushup Counter

    pushup counter

    Stay fit even if you have to stay inside! Use a proximity sensor to count your push-ups. - Hackster

    Ethernet for CircuitPython with Wiznet5K

    ethernet

    Wireless is wonderful, but sometimes you want the strong reliability of a wired connection. If your CircuitPython project is going to be part of a permanent installation, you’ll want to add ethernet networking to your project. - Adafruit Learning System

    IoT News and More!

    Are All Edge Devices “Servers”?

    edge devices tweet

    A discussion broke out on Twitter between leading experts in the field of servers, IoT, gateways and single-board computers over the future of “edge computing.” This post is meant to summarize what was talked about for a broader audience because it is relevant to how we, as an industry, think and talk about “The Edge.” - Adafruit

    Eye on NPI - ESP32-S2

    Eye on NPI

    First off, we are kicking off “EYE on NPI” video series with the Espressif ESP32-S2 SoC. These chips come with a great core, lots of RAM, proven TLS+TCPIP stack, a complete development platform, and lots of code examples. If you’ve used the ESP8266 or ESP32 many elements will be familiar to you! The best new peripheral for this chip is the new USB OTG system. Yes finally native USB comes to ESP! - Adafruit

    NEW VIDEO: What is Adafruit IO?

    adafruit io video

    Build IOT projects with Adafruit IO! Control your projects over the internet and create a dashboard to visually see your sensor data - YouTube

    Watchy, an ESP32-powered Open Source e-Ink Smartwatch

    watchy

    Squarofumi designed a beautiful open source smartwatch with Arduino and Python Support. This watch has a “200×200 E-ink display, WiFi + BLE (Powered by ESP32), BMA423 Accelerometer, 4 Buttons + Vibration Motor, DS3231 RTC for accurate time keeping, and a 2 Week Battery Life”. Schematics and code are available on GitHub. You can also purchase one for $55. - SquaroFumi

    IoT Design Week - Machine Learning and Artificial Intelligence

    iot design week video

    Ladyada and PT talked about Machine Learning and Artificial Intelligence with Microchip Technology. - YouTube

    Espressif ESP32-S2 Sample Boards Shipping

    TinyUSB S2

    We’re seeing some ESP32-S2 samples appearing in the hands of more developers. We’re looking forward to TinyUSB, and then CircuitPython on this module. - TinyUSB

    How Nordic Semiconductor Built ThingyWorld for Embedded World 2020

    Nordic Thingy

    Nordic Semiconductor built an impressive asset tracking demo for their booth at the Embedded World 2020 conference. Their Thingy:9’s are distributed all over the world and tracked using AWS IoT core. - Nordic DevZone

    Adafruit IO Stats and more!

    AIO Stats

    Adafruit IO has 318,457 total users as of March 27, 2020! Here are the interesting stats from the last 30 days:

    • USERS ACTIVE (30 days): 16,697
    • TOTAL FEEDS: 482,240
    • FEEDS CREATED (last 30 days): 21,104
    • There are about 4,330+ MQTT connections active 24/7.

    Sign up for Adafruit IO (for free!) by clicking this link. Ready to upgrade? Click here to read more about Adafruit IO+, our subscription-based service. We don’t have investors and we’re not going to sell your data. When you sign up for Adafruit IO+, you’re supporting the same Adafruit Industries whose hardware and software you already know and love! You help make sure we’re not going anywhere by letting us know we’re on the right track.

  • Adafruit IoT Monthly: Hack-Proof Garage Door Opener, The Internet of Things is Sending Us Back to the Middle Ages and More!

    IoT Projects

    How I Made My Heating Smart without Damaging or Replacing Anything

    Smart Heating

    Andy Bradford has been wanting to upgrade their home’s heating system for a some time – but their house is rented. Damaging the house would cause them to lose their security deposit, “so the whole system must do no damage, be made only of removable parts and be installed without modifying any of the existing infrastructure.” - AndyBradford.dev

    Temper, a compact temperature sensor based on ESP8266 and SHT30

    temper

    Temper is a compact, low power temperature (~30-40uA) sensor based on an ESP8266 and SHT30, with a large 13x7 pixel LED display. - GitHub

    Adafruit CLUE-based Bike-Mountable Computer

    Clue Bike

    The Adafruit Clue is “the bike-mountable commuter computer [Jose Castillo] has always dreamed of”. - @josecastillo

    MicroPython-powered Lightbulb

    UPy Bulb

    MicroPython on an ESP8266-based smart-bulb. Instead of a interacting with the bulb using a proprietary app, @goatchurch is running a MQTT client on the ESP8266 and an MQTT broker on their computer. - @goatchurch on Twitter

    BLE Cheerlights

    BLE Cheerlights

    Using an AirLift FeatherWing to get the current cheerlights color, then advertising the color over BLE to an ItsyBitsy nRF52840 and a Circuit Playground Bluefruit. CircuitPython code is available on GitHub . - @DavidGlaude

    Control Home Appliances with Google Assistant and Adafruit IO

    AIO Google Assistant

    Techmirtz is controlling a 60W (not smart!) bulb using the Google Assistant voice-based command service. Adafruit IO, our free IoT service, has built-in integration with services like IFTTT. - Hackster.io

    Building an ESP32-CAM Video Surveillance Robot

    ESP32-CAM Robot

    konsdor has designed and built a video surveillance robot, powered by the ESP32-CAM microcontroller board. The robot may be controlled by the operator over the internet, as the board has WiFi networking built-in. - Hackster.io

    PyPortal Planter with Adafruit IO

    Pet Planter

    Build a smart planter with an Adafruit PyPortal and CircuitPython. Monitor your plants vitals with an Adafruit STEMMA Soil Sensor and plot moisture and temperature data. Use Adafruit IO to create a visual dashboard with gauges of your plants water levels. - Adafruit Learning System

    IoT Cloud Enabled Alarm Clock

    IoT Cloud Alarm Clock

    Teaching a mid-2000’s clock some new tricks. MoritzDornseifer updated a Tivoli Audio radio clock to be set by the internet. They’ve redesigned the clock assembly and updated the hardware to run on a Arduino Nano 33 IoT. The alarm can be set via the snooze button and configured via the Arduino IoT Cloud Dashboard. - Hackster.io

    How to Build a Hack-Proof Garage Door Opener

    Garage Door Opener

    Pete Lewis built a new twist on an IoT garage door opener. He added an ATECC508A crypto co-processor board to provide end-to-end encryption when opening the door to his garage. - IEEE Spectrum

    Internet-Connected Conference Badge

    Cloud Badge

    Codensolder built a CloudBadge conference badge with the PyBadge, an internet-connected conference badge which communicates with Adafruit IO over MQTT. While the PyBadge doesn’t have built-in WiFi, codensolder attached an AirLift WiFi FeatherWing to the PyBadge’s Feather headers to add WiFi, all coded in CircuitPython. - CloudBadge on GitHub

    IoT News and More!

    A CEO’s Experience During the nCoV Crisis

    Espressif CEO

    Espressif is a company with their main offices in China. The recent nCoV virus outbreak has affected them, but they’ve taken some precautionary measures, such as working from home and having multiple offices outside of China. Espressif’s CEO Teo Swee Ann published two articles about running the company during this outbreak. - Part I: Safety First, and Part II: On the Ground.

    The Internet of Things is Sending Us Back to the Middle Ages

    IoT Middle Ages

    Joshua A.T. Fairfield discusses “the new digital serfdom” as we purchase more internet-enabled devices controlled by advertisers and large companies. - The Conversation, Pocket

    Arduino IoT Cloud Gets a New Dashboard with Historical Data Import, Greater Customization, and More

    IoT Cloud Arduino

    Arduino’s IoT Cloud was updated with a shiny new dashboard which can import and display historical data from multiple devices. - Hackster.io

    Raspberry Pi 4 v1.2 Fixes USP-C Power Delivery

    Pi 4 Rev 1.2

    The Raspberry Pi Foundation has released a new revision of the Raspberry Pi 4 (identified by a c03112 model number) which fixes an identified issue with USB-C power delivery. - CNX-Software

    The Things Industries launches a Global Join Server to push secure LoRaWAN provisioning practices

    TTN Global Join Server

    The Things Industries announced the launch of a Global Join Server which allows activation of any LoRa network, anywhere in the world, as long as it uses LoRa standard interfaces. This new ecosystem’s role is to “store root keys, generate session keys, and send them securely to the network and application servers”. This new model replaces the need for manufacturers to generate secure keys. - Things Industries via LinkedIn Pulse

    Bluetera II, a full-stack dev board that uses protocol buffers

    BlueTerra II

    BlueTerra II is an open-source IoT development board which supports Google’s Protobuf and motion algorithms. This tiny board has “everything. From hardware to firmware to the software running on your mobile device or PC is strictly open-source”. They’re using a Madgwick-based motion fusion algorithm which is also open source, as opposed to other fusion algorithms supported by similar development boards. - CrowdSupply.

    Adafruit IO Stats and more!

    AIO Stats

    Adafruit IO has 311,441 total users! Here are the interesting stats from the last 30 days:

    • USERS ACTIVE (30 days): 16,831
    • TOTAL FEEDS: 458,270
    • FEEDS CREATED (last 30 days): 21,985
    • There are about 4,200+ MQTT connections active 24/7.

    Sign up for Adafruit IO (for free!) by clicking this link. Ready to upgrade? Click here to read more about Adafruit IO+, our subscription-based service. We don’t have investors and we’re not going to sell your data. When you sign up for Adafruit IO+, you’re supporting the same Adafruit Industries whose hardware and software you already know and love! You help make sure we’re not going anywhere by letting us know we’re on the right track.

  • State of IO 02.19.20

    Iostats

    adafruit.io has 308,729 total users, however! Here are the most recent stats from the last 30 days which is a pretty good picture!

    • USERS ACTIVE (last 30 days): 16,656
    • USERS ADDED (last 7 days): 1,989
    • FEEDS: 458,270
    • FEEDS CREATED (last 7 days): 5,535

    In the last 30 days adafruit.io inserted over 789 million records. There are about 18 million background jobs per day and about 4,200+ MQTT connections active 24/7. IFTTT, Adafruit’s week in review: February 10 – February 16

    • Service connections: +594, all-time 65,733
    • Applet runs: +1,340,267, all-time 201,663,200
    • Applets turned on: +1,627, all-time 151,161
  • Adafruit IoT Monthly: Physical Event Notifiers, Particle deprecates Particle Mesh and More!

    IoT Projects

    All-in-One MQTT Home Automation Remote

    MQTT Remote

    serverframework built a WiFi “MQTT remote” with an ESP8266. Pressing a button triggers a function to send a MQTT message to a Home Assistant listener. - serverframework blog

    Kinetic Courier, Physical Event Notifier

    Kinetic Courier

    Something happened? Ring a bell, wave a flag, light some lights! A physical notification platform for IoT events. - hackster.io

    Alexa-controlled Adam Savage Pumpkin with IFTTT and Adafruit IO

    Alexa Pumpkin

    minihannah built an Alexa-controlled pumpkin which uses a combination of Adafruit IO and IFTTT to trigger lights connected to an Adafruit Feather M0 WiFi. - adafruit blog

    Internet Monster

    Internet Monster A cute monster that repeats what the internet says. What could possibly go wrong! - instructables

    PyPortal MQTT Sensor Node/Control Pad for Home Assistant

    PyPortal MQTT

    Richard Albritton wrote a guide about how to take IoT to the next level with this MQTT powered Super Sensor with an Adafruit PyPortal. - Adafruit Learning System

    Physical Test Controller with TreeJS, Socket.io and CircuitPython

    MQTT Web Controller

    @makerschmitz is building a physical controller with a web interface. You can watch it in-action on Twitter.

    IoT News and More!

    Particle deprecates Particle Mesh, discontinuing Particle Xenon

    Particle CEO Note

    Particle has announced today that they are discontinuing development of Particle Mesh, their OpenThread-based mesh networking solution, and will no longer be manufacturing their associated Xenon development board.

    Particle states they ran into two barriers which kept them from delivering on the promise with Particle Mesh:

    • Mesh networking, while a compelling technology, is extremely complex, and trying to make it “just work” with zero configuration for all customers in all environments just wasn’t feasible. As a result, the experience of Particle Mesh doesn’t live up to the standard that we set for ourselves with our other products.
    • It turns out that, for most of our customers, 802.15.4 mesh networking seems to not have been the right technology in the first place; most customers would be better off using Bluetooth Low Energy (which we will continue to invest in) or a sub-GHz radio like LoRa (which can be added to Particle through third-party accessories).

    See Particle’s full announcement and learn How to use Xenon with CircuitPython.

    Testing CircuitPython on Teensy 4.0 – IoT made easy IoTeensy

    IoTeensy

    CircuitPython has landed on the NXP iMX RT1062. We threw together a quick IoT project which uses the AirLift FeatherWing to fetch inspirational quotes from Adafruit’s quote service and displays them on an OLED FeatherWing. - Adafruit Blog

    The World’s First LoRa SoC: STM32WL

    LoRa STM32WL

    STMicroelectronics announced the launch of the STM32L, the world’s first integrated LoRa System-on-a-Chip (SoC). This is the first silicon which integrates a microcontroller and a sub-GHz radio, previously two separate modules. - CNX Software

    Arduino Portenta H7

    Arduino H7 Pro

    Arduino released a new Pro line at CES 2020 with a new flagship board - the Portenta H7. This board contains a STM32H747, Murata 1DX dual WiFi 802.11b/g/n 65 Mbps and Bluetooth 5.1 BR/EDR/LE, Secure Element (NXP SE0502), and a GPU (Chrom-ART graphical hardware Accelerator).

    Use-cases for this $99 board include “high-end industrial machinery, labratory equipement, computer vision”, and machine learning. - Arduino.cc

    WeMos W600-PICO

    WeMos W600

    WeMos released a new board for $2.10 USD plus shipping. The CPU is a Winner Micro W600 ARM Cortex-M3 WiSoC and the board is pre-loaded with MicroPython. - CNX Software

    OTA Device Firmware Updates for NRF52 Processors

    NRF52 OTA Firmware

    Mohammad Afaneh on NovelBits posts about updating the internal firmware on internet of things (IoT) devices via Bluetooth. - novelbits

    Pocket-Sized ESP32 with 300uW Display

    Pocket ESP32

    A pocket-sized ESP32 with a 300uW SHARP Memory LCD. - Hackaday.io

    ESP-AHT-10

    ESP-AHT 10

    A minimalist ESP temperature sensor which you can plug into your USB port. Designed with KiCAD, the board files are open source and available on GitHub

    Adafruit IoT Updates

    All the Internet of Things Episode 6: Digi-Key IoT Studio

    All the IoT Digi-Key

    Adafruit and Digi-Key have teamed up to present All the Internet of Things – a six-episode series covering everything you could ever want to know about the Internet of Things.

    We are very excited to release the final episode, which incorporates all the different subjects discussed in previous episodes, and shows off this incredible resource: Digi-Key IoT Studio.

    Unlike most other IoT platforms, Digi-Key IoT Studio is code-less — all sensor interaction and storage is done automatically by the drag-and-drop IDE. You don’t need to install toolchains, code editors or compile any code on your computer! Digi-Key Studio runs in your web browser, handles all aspects of developing an internet of things project, and even compiles your code remotely.

    Watch the full video or check out this guide to get started now.

    Free Year of Adafruit IO+ with the GitHub Student Developer Pack

    GitHub Education Great news for students! Adafruit is part of the GitHub Student Developer Pack!

    If you are a student and have joined (details here), all you need to do is log in to your adafruit.com account, click Services, then GitHub, and click connect! The discounts and free adafruit.io plus are waiting for you, it’s that simple!

    What is Adafruit IO?

    Adafruit.io has over 16,000+ active users in the last 30 days and 930+ Adafruit IO Plus subscribers. Sign up for Adafruit IO (for free!) by clicking this link. Ready to upgrade? Click here to read more about Adafruit IO+, our subscription-based service. We don’t have investors and we’re not going to sell your data. When you sign up for Adafruit IO+, you’re supporting the same Adafruit Industries whose hardware and software you already know and love! You help make sure we’re not going anywhere by letting us know we’re on the right track.

  • Adafruit IoT Monthly: Learning from IoT Projects, Adafruit Joins the LoRa Alliance, Ring Ransoms, and more!

    IoT Projects

    Face Tracking and Identification with Walle-ng

    OpenCV Robot

    Anton built a robot inspired by the Pixar Movie Wall-E. If a face is detected (using the OpenCV Facial Recognition Demo), activity is logged and a notification is sent to an Amazon Web Service API Gateway and distributed as an SMS by AWS’s Simple Notification Service. - Hackster.io

    Data Logging Zero to Hero with CircuitPython and MQTT

    CircuitPython MQTT

    Robin Cole published a tutorial which navigates through the basics of creating a CircuitPython temperature logging device. First, you use the Mu editor to plot your data and verify it’s correct. Then add WiFi Connectivity using a local MQTT broker and CircuitPython’s MiniMQTT module. Finally, add an MQTT sensor to Home Assistant so the data is graphed on a web dashboard. - Hackster.io

    ISS-Tracking Globe Lamp

    Globe

    This project uses an Open Notify API notification called ISS Location Now to track the International Space Station. A WeMos D1 grabs and parses the data. Then it tells a servo where to place a laser-pointer on a 3D-printed globe. - Instructables

    Disaster-Radio - an off-grid, solar-powered mesh network

    Disaster Flowchart

    disaster.radio is a work-in-progress long-range, low-bandwidth wireless disaster recovery mesh network powered by the sun.

    What I Learned Building an Indoor Air Quality Monitor with Adafruit IO

    AQ Monitor

    There are lessons to learn from every electronics project. Even a sensor node can quickly become complicated. Andy Bradford wrote up his experience (and provided free, open source code on GitHub) in building a logging platform. - Andy Bradford

    PyPortal Voice Controlled Smart Switch and Time Display

    PyPortal Smart Switch

    We’ve written about this project in a previous IoT Monthly before, but it was only a sneak preview. The PyPortal Voice Controlled Smart Switch and Time Display is now on the Adafruit Learning System as a guide - Adafruit Learning System

    Sending Arduino Data to Google Sheets using the Google Cloud Platform

    Arduino Google IoT

    Building an Arduino sketch to send data to Google Sheets using the Google Cloud Platform. - DZone

    IoT News and More!

    Adafruit joins the LoRa Alliance

    Adafruit LoRa Alliance

    Adafruit is thrilled to announce that we have joined the LoRa Alliance! I asked Ladyada why we joined this alliance…

    “Humans have done a great job of connecting people in dense populations like cities or buildings – WiFi and Cellular are ubiquitous technologies that connect people, machines and sensors. The future is to connect people wherever they are, and that’s where LoRa has so much promise. We think LoRa and LoRaWAN are the best way to solve last-mile connectivity for Industrial and Agricultural IoT” – Limor “Ladyada” Fried.

    Read the full blog post here…

    Ring Cameras are Ransomed

    Ring Camera

    December 2019 was the month of Ring insecurity. First, videos appeared where hackers spoke to families through their Ring cameras: “We would like to notify you that your account has been terminated by a hacker.” The voice then says, “Pay this 50 bitcoin ransom…”.  Ring asserted that their investigation found that the family used an email/password combination which was exposed in an unrelated data breach. @fs0c131y on Twitter did a deep-dive into Ring’s iOS/Android application. They found the application to leak geographic details of cameras through their API, Ring does not require authentication for video/photo alerts and the application does not implement rate-limiting for logging in. It’s likely that hackers are running automatic bots against the login with exposed usernames/passwords from previous breaches.

    FBI releases a statement for building a digital defense for the Internet of Things

    FBI Press Release

    The FBI has suggested network security measurements for those with IoT devices on their network. In short: change factory settings/passwords, isolate IoT devices to their own network, and update your devices regularly. - FBI

    LoRaWAN and Wi-Fi: Made for Each Other

    WiFi and LoRaWAN

    Remi Lorrain wrote that “WiFi and LoRaWAN work well together as an end-to-end solution in IoT applications and more.” - EETimes

    Project Connected Home over IP: an Open Standard for Smart Home Devices

    Project Connected Home

    Amazon, Apple, Google, Zigbee Alliance and board members form a working group to develop an open standard for smart home devices - Project Connected Home

    Ikea’s 2020 Smart Home Lineup is Unveiled

    Ikea Smart Home App

    Ikea is planning on barreling into the smart-home area in 2020 with new bulbs, products and even a ZigBee gateway. - TheVerge

    DZone’s IoT Predictions for 2020

    DZone IoT 2020 Stock Photo

    Dzone published their 2020 IoT predictions, among them are: the edge gets smarter, evolving networks and protocols, AI Smart Homes connected to ISPs, increases in DIY Home Security installations, more hard-lined policies for BYOD, and new flexible electronic materials. - Part 1 and Part 2

    The 2019 State of Responsible IoT Report

    Responsible IoT Report

    “With ThingsCon, we have devoted ourselves to working towards a ‘responsible IoT’. But what does that look like in the light of Surveillance Capitalism? With this years ‘responsible IoT Report’ – RioT for short – we wanted to find out.” - ThingsCon

    HackADay SuperConference Talk on YouTube: Basic Device Security for Basic Needs

    HackADay Talk Screenshot from Youtube

    Kerry Sharfglass remarks that “In our IoT-ified world, device security is more important than ever, but not every hardware product needs to be secured like an ATM inside a missile. I will discuss basic design practices and implementation tricks which are easy to incorporate into your product and provide a solid baseline of security against casual adversaries.” - YouTube

    Five Reasons to Upgrade to MQTT 5

    MQTT 5 Spec Screenshot

    The latest version of the IoT’s favorite stateless protocol has been out for a while. Here are five reasons to upgrade to it - IoTforAll

    Actinus Environmental Sensor FeatherWing Released

    Sensor Featherwing

    Actinius’ Environmental Sensor FeatherWing measures temperature, humidity, pressure, and air quality. The Feather-compatible environmental sensor add-on also includes a Grove connector for use with any I2C-compatible microcontroller. It’s available for purchase from the actinius website and is in-stock at the time of writing.

    OpenMV Cam H7 Plus

    OpenMV Cam H7 Plus

    The OpenMV Cam is a small, low power, microcontroller board which allows you to easily implement applications using machine vision in the real-world. You program the OpenMV Cam in high level Python scripts (courtesy of the MicroPython Operating System) instead of C/C++. It’s currently in-production and will be in stock by March 2020. - OpenMV

    Adafruit IoT Updates

    New Adafruit IO Feature: Kiosk Mode for Dashboards

    Kiosk Mode

    Adafruit IO Dashboards have a new “kiosk mode” URL that will launch the dashboard in a “no browsing mode” without any of the surrounding page. This is super-handy if you’re designing an exhibit or would like to use a Raspberry Pi + HDMI Display to monitor your Adafruit IO Feeds. Read our blog post to learn how to enable this feature on your dashboard right now…

    New PyPortal Sizes: Meet the PyPortal Pynt and the PyPortal Titano

    PyPortal Family Picture

    The PyPortal is our easy-to-use IoT device that allows you to create all the things for the “Internet of Things” in minutes. Adafruit has released the PyPortal Pynt, the little sister to our popular PyPortal - zapped with a shink ray to take the design from a 3.2” diagonal down to 2.4” diagonal screen. We’ve also released the PyPortal Titano, with an ATMEL (Microchip) ATSAMD51J20 plus an Espressif ESP32 Wi-Fi coprocessor with TLS/SSL support built-in. PyPortal Titano has a bigger 3.5″ diagonal 320 x 480 color TFT with resistive touch screen. Compare that to the original PyPortal’s 3.2” 240x320, there are twice the number of pixels! Also, Adafruit has updated the connector to be a reverse-friendly USB C connector.

    Build a Mini Smart Home with the Smart Home Kit for Digi-Key IoT Studio

    DigiKey Home Kit

    Automate your own adorable, IoT-enabled papier-mâché house. The small size of this build lets one explore wiring, user interaction, and firmware deployment without having to get a ladder out. After building this project, you can re-purpose it for your home or apartment. We’ve specifically selected components and sensors which are common in real-world IoT projects. You can also go further with this project, adding sensors to monitor different rooms in your home. Visit the product page for this kit on the Adafruit Website…

    What is Adafruit IO?

    Adafruit.io has over 14,000+ active users in the last 30 days and 880+ Adafruit IO Plus subscribers. Sign up for Adafruit IO (for free!) by clicking this link. Ready to upgrade? Click here to read more about Adafruit IO+, our subscription-based service. We don’t have investors and we’re not going to sell your data. When you sign up for Adafruit IO+, you’re supporting the same Adafruit Industries whose hardware and software you already know and love. You help make sure we’re not going anywhere by letting us know we’re on the right track.

  • Adafruit IoT Monthly: Machine Learning 101, PWNing the ESP32, and more!

    IoT Projects

    Running ML on Particle Hardware, ML 101

    Tensorflow Lite now runs on newer Particle devices! Brandon Satrom published a very detailed tutorial about running TFLite on Particle devices. - Particle

    Do your chores or else I’ll cut off the internet!

    AccidentalRebel is creating a device “that monitors and logs if my kids have done their chores and daily tasks. If not, their devices won’t have access to the internet.”. When their chores for the day are complete, their device will automatically re-connect them to the internet. - Hackaday.io

    ESPRing Clock

    ESPRing is a NeoPixel ring with an onboard ESP module. The ESP connects to WiFi and fetches the NTP time. - Hackaday.io

    AutoHome - Universal Home Automation with Raspberry Pi

    rirozizo is building a home automation system powered by a Raspberry Pi “to remotely control any possible home appliances without the use of proprietary hardware and apps”. They’re using the (free) Adafruit IO service as the MQTT broker and for data visualization. - Github

    Voice-Controlled PyPortal Smart Switch

    Dan the Geek is improving their PyPortal-based Smart Switch. They connected it to Adafruit IO’s IFTTT integration so they can turn a light on or off using voice commands over Alexa or Google Assistant. - Twitter

    Evaluating Motion Sensors, Microwave v.s. PIR

    Akarush wrote a detailed log of his evaluation for two motion sensors - a RCWL-0516 and a PIR motion sensor. The results? Each sensor has unique advantages and disadvantages. - Hackaday.io

    Bluetooth-based Costume Props using Arduino and ESP32

    Juan Carlos Jiménez hosted a costume party and integrated their costume with the house decorations. This BLE-powered costume prop is spooky. - JCJC-Dev

    RGB Weather Strip

    This RGB LED Strip changes color based on the weather forecast outside. - Hackaday

    Code-less IoT Projects with Node-RED on Raspberry Pi

    Les Pounder posted a tutorial about using the Node-RED development tool…

    Node-RED is an awesome tool and anyone, yes anyone can make something with it. All you need is a web browser and a device with Node-RED. Node-RED uses JavaScript syntax, but we do not have to write any code, rather we link nodes together.

    Around the Internet - IoT News

    PWNing MBEDTLS on ESP32

    LimitedResults found vulnerabilities with the ESP32 which allows an attacker to compromise the cryptographic library on the ESP32, MbedTLS. It’s important to note that an adversary will need physical access to the ESP32 module as it’s been compromised using a voltage-glitching attack. While this doesn’t impact hobbyists, it is a an attack on the hardware module (you can not roll out new software to patch it). If you have an ESP32 module in the field, it is potentially vulnerable to this type of attack, given an attacker’s resources and time. It looks like Espressif is following this report. They tweeted after ESP32 was pwned a couple of months ago: “We have upgraded the hardware; stay tuned for ESP32v3 with improved security and performance!”. We are unsure if this impacts the ESP8266 or the upcoming ESP32-S2 module.

    Adafruit joins the Zephyr Project

    The Zephyr Project is a scalable real-time operating system (RTOS) supporting multiple hardware architectures, optimized for resource constrained devices, and built with safety and security in mind, and we’re thrilled to announced we’ve joined the project. - Adafruit

    Mozilla is building a “Web of Things”

    Mozilla is building an “open platform for monitoring and controlling devices over the web”.

    The idea of the Web of Things is to create a decentralized Internet of Things by giving things URLs on the web to make them linkable and discoverable, and defining a standard data model and APIs to make them interoperable.

    Read more on Mozilla IoT…

    Amazon’s long-term plan for Alexa

    An interview with Rohit Prasad, Alexa’s head scientist, revealed details about where Amazon wants to head with their powerful voice assistant. - TechnologyReview

    Hackable Smart Watch powered by Espruino

    Bangle.js is a hackable, open-source smartwatch that can be easily customized. It’s currently crowdfunding on Kickstarter and may fill the space on our wrists from Pebble’s acquisition by Fitbit. The bangle packs more of a punch than a pebble with a nRF52832, 64kB RAM, heart rate monitor, accelerometer, magnetometer and a 350mAh battery. - Kickstarter

    Best Buy discontinues Insignia IoT Products

    Insignia, Best Buy’s generic hardware brand, has shut down every product which replies on their app (including a freezer). Each time this happens, we think about how many products in our lives rely on “other peoples servers”. Do you have a contingency plan for the IoT devices in your life? - Hackaday

    Recognizing AI Snake Oil

    AI has been intertwined with IoT (AIOT). But, “Much of what’s being sold as ‘AI’ today is snake oil — it does not and cannot work.”. This paper addresses the important questions of “Why is this happening? How can we recognize flawed AI claims and push back?” - Princeton

    Analyzing NB-IoT and LoRaWAN Sensor Battery Life

    Low power wide area network (LPWAN) technologies like NB-IoT and LoRaWAN are perfect for your projects requiring small packets, long battery life, and long distances. But how long will the batteries in your IoT project really last? - Semtech Developer Journal

    Adafruit IoT Updates

    Promotion: 1 Year of Adafruit IO Plus Free with $250 Adafruit Purchase

    We’re running a special promotion! As of November 20th, 2019 5:30pm, if you place an order of $250 or more at Adafruit, you’ll receive a 1 year subscription to Adafruit IO+. You’ll receive a minimal yet elegant Adafruit IO+ Subscription Card! This card comes with a code on the back and when typed into your Adafruit IO account, will activate a full year of Adafruit IO+ service for all the IoT projects you can dream up.

    Promotion: Google AIY Voice Kit for Black Girls CODE

    For a limited time, whenever you buy a Google AIY Voice Full Kit the regular price of $59.95 here, on this page, Google will automatically donate one to Black Girls CODE. Black Girls CODE goal is to empower young women of color ages 7-17 to embrace the current tech marketplace as builders + creators. Check out the bundle on Adafruit’s website.

    What is Adafruit.IO?

    Adafruit.io has over 14,000+ active users in the last 30 days and 850+ Adafruit IO Plus subscribers. Sign up for Adafruit IO (for free!) by clicking this link. Ready to upgrade? Click here to read more about Adafruit IO+, our subscription-based service. We don’t have investors and we’re not going to sell your data. When you sign up for Adafruit IO+, you’re supporting the same Adafruit Industries whose hardware and software you already know and love. You help make sure we’re not going anywhere by letting us know we’re on the right track.

  • Adafruit IoT Monthly: Helping Harry's Heart, CircuitPython meets AWS IoT and more!

    IoT Projects

    Helping Harry’s Heart

    Adam Taylor built a remote monitoring system to monitor his dog’s respiration rate to help the vet to adjust his heart medication. They used a X4M200 respiration sensor fitted to Harry’s (the dog) harness. Adam used Adafruit IO to send the dog’s heart rate to the internet, privately. “Along with [the] graphical view, I can also see the time stamped data” to share with “the cardiac specialist at Harry’s next appointment. - Hackster.io

    CircuitPython BLE Remote Control On/Off Switch

    rdagger has “multiple computers around the house, and sometimes they need to be rebooted remotely.”. Instead of manually opening the locked closet and rebooting their NAS, rdagger opted for a different approach. They built a BLE peripheral which “attaches to the front so the server can be turned on remotely from outside the closet”. - Read the guide on the Adafruit Learning System

    Hacking the Sonos Ikea Symfonisk into a High-Quality Amplifier

    Ikea released a $99 SONOS-compatible speaker, but a plastic enclosure can’t hold a candle to a pair of high-quality wooden speakers. Ben Hobby grabbed some tools and (literally) hacked one apart to connect it to his bookshelf speakers so you don’t have to. - Makezine.

    PyPortal IoT Plant Monitor with AWS IoT and CircuitPython

    This smart-planter monitors your plant’s vitals on the PyPortal’s screen, logs data to Amazon AWS IoT, and sends an email to your inbox when your plant needs to be watered! Using Amazon AWS IoT with CircuitPython allows you to prototype internet-of-things projects faster than ever before. With CircuitPython, you’re able to instantly provision your device for AWS IoT by dragging and dropping certificates/keys. - Adafruit Learning System

    Mini Smart Home with Huzzah, HASSio and Crickit

    The Mini Smart Home is a test bed that can let you move one step closer to making a truly smart Smart Home. When finished, you will have a completely independent system that hosts a customizable browser based User Interface, a device management system, usage and data logging, advanced automation tools, and user account security. This is all done with a Smart Home server OS called Home Assistant. - Adafruit Learning System

    Around the Internet – IoT News and Links

    Tearing Down Quirky’s Egg-Minder

    A teardown of the (now defunct) Quirky’s Egg-Minder reveals a well-designed IoT product before the ESP8266 was “a thing” - HackADay

    Using the ESP32 as a WiFi Coprocessor (like Adafruit AirLift boards running the excellent nina-fw firmware) is becoming more popular. Instead of printf()’ing your way through ESP-IDF and mbed - this post details a method of using the Eclipse IDE and a JLink debugger. - DZone

    Amazon’s Quest to put Alexa everywhere

    Aside from the usual smart-speaker, Amazon released a bevy of new hardware supporting their Alexa voice assistant earlier this month. This hardware ranges from a wearable wing to Alexa-compatible eyeglasses. But what’s the goal of releasing all this hardware so quickly? - VentureBeat

    Why Engineering Teams Are Shutting Down Industrial IoT Projects

    Despite the previous accomplishments of their profession, engineering teams are unexpectedly shutting down industrial IoT projects at an alarming rate. But why now? It seems like IoT, as an industry, is evolving daily with new hardware advances. - DZone

    MCCI Catena 4618 is a Cortex M0+ LoRaWan + sensors in a Feather footprint

    MCCI has released the Catena 4618, a complete single-board IoT device and sensors for LoRaWAN projects.

    Based on the Murata CMWX1ZZABZ-078, and designed to be compatible with the MCCI Catena 44xx and 46xx family and the Adafruit Feather family of development boards and accessories, the Catena 4618 is a great platform for LoRaWAN investigation and deployment. It works well with The Things Network, or any LoRaWAN 1.0 or 1.1 network in the 865 to 923 MHz range.

    The board is available from the MCCI online store and more information is available on the MCCI website.

    NoCAN - a new type of wireless sensor network

    Transmitting data over SPI/I2C wires does not work well for long distances, you can transmit longer distances but only when reducing the frequency. The NoCAN platform allows creation of a reliable sensor network with nodes connected through a CAN bus. It includes a dynamic-address-assignment scheme from a node manager when it’s bootstrapped (just like DHCP). - Omzlo

    ESP32 and Raspberry Pi Zero W in Space

    The APEX experiment brought two ESP32s and a Raspberry Pi Zero into space to evaluate faster embedded computing options for space-flight.

    The main board included two ESP32s and a Raspberry Pi Zero W, running resinOS / balenaOS, an operating system designed to run parallel Docker containers and optimized for IoT fleet management.

    Read more on HackADay…

    MQTT Security 101

    The internet-of-thing’s favorite low-power protocol, MQTT, doesn’t require any security measures. But it’s 2019 and we should enforce best practices, this article dives into the vulnerabilities, and security measures to take from a broker or client perspective. - Medium

    The ESP32MX-E is a robust ESP32 platform

    Between an active community, a low price-point, and ongoing development, the ESP32 is an attractive choice for connecting internet-of-things projects to the internet. The the esp32MX-E takes the ESP32 one-step further by adding a STMicroelectronics STM32F030F4 and Ethernet support. This project is coming soon, sign up on the project Crowd Supply page to receive updates.

    Scientists tracking eagle’s migration patterns rack up roaming charges

    Russian scientists tracking the migration patterns of eagles suddenly ran out of money when they found the eagles were migrating hundreds of miles away to Pakistan and Iran, racking up thousands of dollars of roaming charges. While this is funny, it’s also a scenario one should consider when building mobile IoT projects. - BBC News

    Track Ocean Currents with the Maker Buoy Kit

    The Maker Buoy Project’s Arduino-based drifting buoy is the “Internet of Things applied to the ocean”. If you’re an oceanographer or marine biologist looking for a robust, open-source, buoy system - look no further than the Maker Buoy’s prebuilt kits. Maker Buoy now offers pre-populated PCBs, complete kits and bare-PCB hardware on their store.

    Adafruit IOT Updates

    New Adafruit IO Block - Multi-line text block

    If you have an Adafruit IO Feed containing a lot of text (tweets, packed data from one sensor, etc.), you can now format and display your feeds on your Adafruit IO dashboard using a multi-line text block. – Visit your Adafruit IO Dashboard to try it out now

    SmartiPi Touch 2 - Stand for Raspberry Pi 7” Touchscreen Display

    If you’re running a smart-home setup and want to build an inexpensive central monitoring display, the SmartiPi Touch 2 is a well-designed stand for the Raspberry Pi 7” touchscreen display. Run Chromium in kiosk mode with the page set to Home Assistant or your Adafruit IO dashboard and you’ll have a touch-enabled smart-thing display - visit the Product Page here.

    Coming Soon - Adafruit Feather STM32F405 Express

    The new STM32F405 Feather (video) that Adafruit designed runs CircuitPython at a blistering 168MHz – our fastest CircuitPython board ever! We’ve tried it out with an AirLift Breakout and it’s incredibly quick. This may be the CircuitPython Feather you want powering your IoT project. The Feather SM32F405 Express is not yet available - sign up to be notified when it is put in stock.

    What is Adafruit.IO?

    Adafruit.io has over 14,000+ active users in the last 30 days and 850+ Adafruit IO Plus subscribers. Sign up for Adafruit IO (for free!) by clicking this link. Ready to upgrade? Click here to read more about Adafruit IO+, our subscription-based service. We don’t have investors and we’re not going to sell your data. When you sign up for Adafruit IO+, you’re supporting the same Adafruit Industries whose hardware and software you already know and love. You help make sure we’re not going anywhere by letting us know we’re on the right track.

  • Adafruit IoT Monthly: The S in IoT is for Security, Amazon announces Sidewalk and more!

    Adafruit IoT Updates

    Adafruit IO Update: Set icons on your gauge and text blocks!

    Settable Icons and decimal controls are now available for your Adafruit IO Gauge and Text elements! - Visit your Adafruit IO Dashboard to try it out now

    New IoT Hardware: TinyPICO ESP32 Development Board

    The smallest, most feature-rich ESP32 dev board has arrived at Adafruit…

    There are quite a few ESP32 boards on the market, but they all require you to compromise on one or more features. Some don’t have on-board battery management, while some do but they don’t have low deep sleep current. Others have great low-power modes, but are large and not breadboard-friendly, and none of them have extra RAM unless you go for a more expensive and larger WROVER-powered board. We just weren’t happy with the status quo - we wanted to have our cake and eat it too! So we designed the smallest un-compromising ESP32 development board in the world, and then went a step further and gave it 4 MB of extra RAM, an on-board RGB LED, and more juice with a 700 mA 3.3 V regulator.

    Visit the product page to learn more…

    Coming soon: BrainCraft HAT for Raspberry Pi 4

    We’ve started to design a BrainCraft HAT for Raspberry Pi and other Linux computers. It has a 240×240 TFT display for inference output, slot for camera connector cable for imaging projects, a 5 way joystick and button for UI input, left and right microphones, stereo headphone, stereo speaker out, three RGB DotStar LEDs, two 3 pin STEMMA connectors on PWM pins so they can drive NeoPixels or servos, and Grove/STEMMA/Qwiic I2C port. This should let people build a wide range of audio/video AI projects while also allowing easy plug-in of sensors and robotics! The BrainCraft has a wide variety of connectivity methods:

    Wireless flexibility: WiFi, cellular, Bluetooth LE Works with adafruit.io, of course!

    Visit the product page to learn more…

    IoT Projects

    a Hello World for ESP-NOW

    ESP-NOW is “yet another protocol developed by Espressif, which enables multiple devices to communicate with one another without using Wi-Fi”. If you want to try out ESP-NOW right now, Jake Wachlin built an ESP-NOW example with example code on GitHub (you’ll need two ESP32 devices). He also took an extra step and performed latency and reliability testing from his city apartment (a very busy 2.4GHz spectrum).

    Smart Outlet with MKR WiFi1010 and Adafruit IO

    Smart plug to control a lamp using Google’s voice assistant with an Arduino MKR WiFi 1010 and a 5V relay - Hackster.io

    Upgrade the ESP32 Firmware on your AirLift

    Adafruit ships a variety of products which use the ESP32 as a WiFi co-processor with a variant of the Arduino nina-fw core. If you want to keep the firmware on your ESP32 WiFi co-processor up-to-date, you’ll need to update the firmware on the ESP32. This guide will teach you how to to turn your board into a USB-to-Serial converter to flash new firmware to your ESP32 – no extra hardware required! - Adafruit Learning System

    Live-stream anywhere with an ESP32-CAM

    Set up a streaming web server with face recognition and detection in less than five minutes with Arduino IDE (we sell a similar ESP32 camera module here) - via Maker.Pro

    Set up Home Assistant with a Raspberry Pi

    Create your own secure, smart-home-hub with HASSio, MQTT, Node RED and More!

    Home Assistant is an open source operating system for a localized Smart Home Hub. Basically it works like IFTTT or Samsung Smart Things, but without having to send your data out onto the internet. This means that you have total control over your data, limit the amount of internet traffic from your smart devices, and tighten up security.

    Read the guide on the Adafruit Learning System…

    Fried Desk Lamp Reborn: Rebuilding a device with connectivity

    Sean Boyce ran 220 Volts AC through his “fancy Xiaomi Smart Lamp”’s 12VDC transformer. He went about repairing it, but didn’t trust “installing another (potentially data-harvesting) app on [his] phone just to control a lamp] and thus wrote a protocol for the NodeMCU fan controller. - via HackADay

    Running TensorFlow Lite Object Recognition on the Raspberry Pi 4

    Want to up your robotics game and give it the ability to detect objects? Maybe implement a security camera that can see and identify certain items? Now that the Raspberry Pi is fast enough to do machine learning, adding these features is fairly straightforward. Take this guide a step further and interface image recognition with your favorite cloud IoT service. - via Adafruit Learning System

    IoT Anti-Addiction Lockbox

    Lock away your vices in an IoT anti-addiction lockbox. Aside from the internet-controlled lock, this box can detect the physical presence of an item using an ultrasonic sensor and a digital scale. - via Instructables

    Monitoring 3D Printer Filament Humidity with low power radio

    Dr. Scott M. Baker built small, wireless sensor nodes, to verify the storage of vacuum sealed “PrintDry” 3D Filament Storage containers. The sensor nodes transmit data using low-powered SYN115 radio modules, which are received by a Raspberry Pi connected to the internet.  - via smbaker.com

    Indoor Air Quality Monitor with PyPortal and Particle

    Measuring the air quality in a your region can help you understand the world around you,

    More than two billion people worldwide continue to depend on solid fuels, including fuels and coal, for their energy needs. Cooking and heating with fuels on open fires or traditional stoves result in high levels of indoor air pollution. Indoor smoke contains a range of health-damaging pollutants, such as small particles and carbon monoxide, and particulate pollution levels maybe 20 times higher than accepted guideline values.

    This is a pretty through build - a Particle Argon acts as an environmental monitor, sends data to Particle Cloud, is logged to long-term Google Firebase storage, and displayed locally on a PyPortal. - via electromaker.io

    eAgar: Large-scale plant monitoring with LoRa

    eAgar is a system for monitoring conditions of agriculture fields. Each sensor device is plug-and-play (just initial device provisioning is required) thanks to using LoRa communication to an outdoor multi-channel LoRa gateway.

    With more information from fields, farmers can predict appearance of disease and prevently treat their plants. That will help them to reduce costs, reduce damages on plants, increase quality of crops and increase yields. Using chemical agents on clever way, in smaller quantities, will enable to customers get healthier food.

    Read more about this project on Hackaday.io…

    Smart Gate - DIY’ing Secure Facility Access

    Michael is building a smart security control gate to control who accesses the Institute Univeritaire De La Cote in Cameroon. - via Hackaday.io

    Around the Internet - IoT News and Links

    The “S” missing from IoT is for Security

    Digi-Key and Adafruit have teamed up to present answers to the idiosyncrasies of properly connecting things to the internet or IoT – (AKA Internet of Things). When you see that the “S” is missing from IoT, that is because there is a large amount security missing from modern day internet connected devices. - Watch “All the Internet of Things: The S in IoT is for Security” on Youtube

    Amazon Sidewalk: a new 900MHz Protocol

    Amazon is taking a plunge into the Low-Power IoT (LPIOT) pool and announced they’re working on a protocol named Amazon Sidewalk. This protocol sits on the 900MHz frequency band and will link IoT devices together. Much like LoRaWAN, it supports secure OTA updates but also geolocation. There’s not a lot of information about this protocol, it won’t be out for a while (at least a year for the SDK) and the first device will be named Fetch is a locator which can clip onto your dog’s collar.  - via Amazon DayOne This protocol does have it’s skeptics though - Kyle Wiggers wrote an article on VentureBeat detailing that he feels “Amazon Sidewalk’s success is Anything but Assured” - via VentureBeat

    ATECC608 Cryptographic Co-Processor gets a CircuitPython Library

    The ATECC608 is the latest crypto-auth chip from Microchip, and it uses I2C to send/receive commands. Once you ‘lock’ the chip with your details, you can use it for ECDH and AES-128 encrypt/decrypt/signing. There’s also hardware support for random number generation, and SHA-256/HMAC hash functions to greatly speed up a slower micro’s cryptography commands.

    We’ve updated this guide to include instructions for wiring and using our new Adafruit CircuitPython ATECC library. This library can interface with your ATECC608 breakout and perform AES-128 signing, random number generation, SHA-256 hashing, Certificate Signing Request generation and more!

    Follow along with the Adafruit Learning System Guide here…

    NEW Book: Learning IoT with Python and Raspberry Pi

    A new book on learning IoT using a Raspberry Pi with Python offers a full IoT curriculum for a person or a classroom. Some of the book’s contents include important internet-connected topics such as:

    • Control a servo using classes
    • Upload data to the cloud
    • Learn how to access a database using SQL statements
    • Deploy a home monitor system that uses the Raspberry Pi Camera and a PIR sensor circuit. Upload pictures to a web server in the cloud and access the pictures on a web page.
    • Control a robot using a multi-threaded application

    Pre-order the book on Barnes and Noble’s website…

    Comparing the ESP32 to the ESP32-S2

    With more ESP32-S2 engineering samples in the wild, maker.pro published an analysis comparing the ESP32 to the new ESP32-S2. Xose Pérez notes that:

    With the new ESP32-S2, Espressif is trying to fill a gap between the ESP8266 and the ESP32, both in features and price. The ESP32-S2 is not an ESP32 killer. Instead, it’s more an ESP8266 killer.

    RPiAPI: a Lightweight WSGI API for RPi GPIO

    Interact with your Raspberry Pi using RPiAPI - a Lightweight API built on top of RPI GPIO - via Hackaday.io

    What is Adafruit.IO?

    Adafruit.io has over 14,000+ active users in the last 30 days and 830+ Adafruit IO Plus subscribers. Sign up for Adafruit IO (for free!) by clicking this link. Ready to upgrade? Click here to read more about Adafruit IO+, our subscription-based service. We don’t have investors and we’re not going to sell your data. When you sign up for Adafruit IO+, you’re supporting the same Adafruit Industries whose hardware and software you already know and love. You help make sure we’re not going anywhere by letting us know we’re on the right track.

  • Adafruit IO Update: More Useful Shared Feeds in Adafruit IO @adafruitio #IoT

    Up until now you’ve been able to share feeds with other Adafruit IO makers, publishing and subscribing from our HTTP and MQTT APIs, but it’s been difficult (i.e., impossible) to actually use them anywhere else on the Adafruit IO site. That has changed!

    We have added Adafruit IO shared feeds to feed listings on your main feeds page and on the dashboard block editor so you can now see all of the feeds you have access to when you’re browsing Adafruit IO. That means quick insight into feeds that were shared with you, the level of access you have (read or read and write) at a glance, and their latest values.

    Shared feeds are listed at the bottom of your main feeds page.

    We’ve also added shared feeds to the dashboard block editor so that you can build hybrid dashboards with feeds from multiple Adafruit IO accounts. Shared feeds get the same instant updates as feeds you own, and if you have read/write access to the shared feeds, you’ll be able to send data to them from dashboards you create.

    Shared feeds are listed at the bottom on the “Select Feeds” screen of the block editor.

    Please stop by the forums or our channel on the Adafruit Discord server and show us what you’re making or to reach out if you have any questions!

  • Adafruit IoT Monthly: Adafruit IO Updates, RGB Stream Deck Message Panel, and more

    Adafruit IOT Updates

    Adafruit IO Update: New User Interface!

    We’ve updated the Adafruit IO user interface to match recent changes on the Adafruit website and the Adafruit Learning System. Here’s a shortlist of changes:

    • New User Interface!
    • Reorganized menus
    • Quick links to access your data faster
    • New footer - the footer from adafruit.com was moved over. The new footer includes links to API documentation, forums, and the support page.

    This is a pretty big update to the IO user interface, one that we hope makes it quicker to get around and easier to find what you’re looking for. Please stop by our channel on the Adafruit Discord server and reach out if you have any questions!

    Read the full changelog with screenshots!.

    New IoT LoRaWAN Hardware: The Things Indoor Gateway!

    Meet the affordable 8 Channel LoRa gateway from TTN, The Things Indoor Gateway! Simple name for a straight-to-the point product. It’s the new low cost, indoor multi-channel LoRaWAN gateway designed by The Things Network, so you know it will work perfectly with TTN. Make a free account, plug it in, follow the easy step-by-step installation instructions and you’ve got yourself a LoRaWAN to Internet gateway in under 5 minutes. No setup or usage fees.

    Visit the product page to learn more.

    New IoT Hardware: M5Stick-C Pico

    Jam-packed with a Wi-Fi & Bluetooth powered ESP32, USB interface, Li-Poly battery and charge circuitry, 0.96” color TFT display, various sensors (IR transmitter, microphone, 6-DoF IMU sensor) all integrated inside, buttons, and more! You can plug Grove sensors into one end, or use the 0.1” header sockets on the other, to connect additional sensors or actuators. It’s perfect for making ultra-small IoT projects or wearables.

    Visit the product page to learn more…

    IoT Projects

    Stream Deck controlled RGB Message Panel using Adafruit IO

    Easily display status messages with a Stream Deck and an RGB Matrix Panel.

    This project uses a custom Stream Deck plugin to communicate directly with the Adafruit IO REST API. It works by posting a specific value to a feed and each button will post a different value to the feed allowing you to easily change messages.

    Read the guide on the Adafruit Learning System here.

    PyPortal Daily UV Index Display

    UV is what gives you vitamin D and a tan… and a sunburn… and, well, skin cancer. It’s a case of a little being ok but too much being pretty bad. Like bacon. You can now check the UV index at a glance on your PyPortal.

    Read the guide on the Adafruit Learning System here.

    PyPortal IoT Plant Monitor with Google Cloud IoT Core and CircuitPython

    Turn your black thumb into a green thumb by building an internet-enabled plant monitoring system by combining Google Cloud IoT Core with CircuitPython.

    Read the guide on the Adafruit Learning System here.

    Consumers Should Immediately - a live feed of recalled product info on a boot

    Named “Consumers Should Immediately…“, it displays a live data feed from The United States Consumer Product Safety Commission (USCPSC) to randomly display thousands of products recalled for reasons such as fire, electrocution, entrapment, choking and a variety of other unintended dangers. - ExtraSleepy.com.

    3D Printed LoRA Remote

    Via back7.co:

    This is meant to be a simple remote control for LoRa-based robotics projects. It runs CircuitPython

    Live Train Station Departure Sign for your Desk

    Build your own UK train station platform departure display (next train indicator) with live data using a Raspberry Pi Zero, OLED display and 3D printed case - a cool (and practical!) desktop gadget - balena.io

    Around the Internet - IoT News & Links

    Ludzinc has been building a IoT Garage Door Opener since 2013, and blogged about Easier ESP development (learn from their four years of frustration). It’s an incredibly comprehensive post discussing everything from websockets to selecting proper hardware.

    The OpenHAK is an open-source fitness tracker which can count your steps and measure your heart rate. Step counting is done by a Bosch BMI160, and the heart rate sensing is done with a Maxim MAX30101. The whole thing is driven and built around a Simblee BLE radio module.

    Officially build an Alexa Gadget with your Raspberry Pi to control a RGB LED - Alexa on GitHub

    Pwavrobot is building a dual esp32 feather-format board, just for fun.

    Icarus, a new IoT Board with the latest nRF91 integrates GPS and Cellular (LTE-M, MB-IoT) - Actinius

    The Next Wave of IoT Bluetooth devices might not have batteries thanks to Bluetooth 5 and Energy Harvesting - EETimes

    What is Adafruit IO?

    Adafruit.io has over 14,000+ active users in the last 30 days and over 830+ Adafruit IO Plus subscribers. Sign up for Adafruit IO (for free!) by clicking this link.

    Ready to upgrade? Click here to read more about Adafruit IO+, our subscription-based service. We don’t have investors and we’re not going to sell your data. When you sign up for Adafruit IO+, you’re supporting the same Adafruit Industries whose hardware and software you already know and love. You help make sure we’re not going anywhere by letting us know we’re on the right track.

  • Adafruit IO Update: New User Interface! @adafruitio #IoT

    We have updated the Adafruit IO user interface to take advantage of recent changes to https://www.adafruit.com and https://learn.adafruit.com along with a batch of internal changes that improve the size of initial code downloaded when you visit the site–total script size was reduced by about 15%–and speed up the initial page load when you visit a page on https://io.adafruit.com.

    The biggest change you’ll notice is a reorganization of our menus. The old menu from the left hand side of the screen is now split between a new header (top of page) with Adafruit-styled “flyout” menus linking to your pages within the site and a footer (bottom of page) with links to information about Adafruit IO.

    new header with links to Adafruit sites and to sections of Adafruit IO

    The header includes links to other Adafruit sites and to other pages in io.adafruit.com.

     

    Profile menu "flyout" showing with links to other pages

    Click on a menu heading, like “Profile”, to show links to the rest of your data on Adafruit IO.

    The new Feeds, Dashboards, and Triggers menus also include quick links to your most recently updated feeds, dashboards, and triggers.

    Feeds menu "flyout" with links to recently updated feeds

    Finally, we’ve brought the footer from Adafruit over. It sits at the bottom of every page and is where you can find links to our support page, quick guides, API documentation, and the feedback form.

    the new old footer, now with links to IO pages and a random quote

    This is a pretty big update to the IO user interface, one that we hope makes it quicker to get around and easier to find what you’re looking for. Please stop by the forums or our channel on the Adafruit Discord server and reach out if you have any questions!

  • Adafruit IOT Monthly: MQTT Comes to CircuitPython, an Interactive IoT Airplane Sculpture and more!

    Adafruit IOT Updates

    MQTT comes to CircuitPython!

    So, you have a CircuitPython project and want to connect it to the internet? You may want to consider adding MQTT to your project. MQTT is an extremely popular and lightweight protocol which can connect your project to the internet and quickly process network events. We’ve built a robust MQTT module for CircuitPython called CircuitPython MiniMQTT to quickly get you started connecting your projects to the internet and sending data around. Learn all about using MQTT with CircuitPython in on the Adafruit Learning System Guide here!

    Adafruit IO CircuitPython Library UPDATE: MQTT!

    The Adafruit IO CircuitPython library has been updated with a new IO_MQTT class for accessing Adafruit IO’s MQTT Broker. We’ve included helpful methods for simplifying interactions with Adafruit IO over MQTT. Download the latest version of the Adafruit IO CircuitPython Library in the CircuitPython Bundle here and check out some examples which make use of the new MQTT class here.

    New IoT Hardware: 8-Channel LoRa Gateway HAT with LoRa and GPS Antenna

    This LoRa HAT from RAK Wireless is capable of multi-channel, multi-node communication, all running in a non-intimidating, hackable Raspberry Pi environment. Unlike our basic LoRa gateway bonnet, this chipset can support all 8 channels, so it can handle multiple clients, on different LoRa channels, without having to do any code tweaks. Visit the product page fo the LoRa Gateway HAT here! Once you have your Internet-to-LoRa gateway set up with this kit, make LoRa nodes using our Feather line for easy deployment of sensor networks that run on battery power. We have guides about setting up LoRaWAN nodes using either Arduino OR CircuitPython on the Adafruit Learning System here.

    #ComingSoon IoT Hardware: Circuit Playground Express BlueFruit

    We are testing the Circuit Playground Express BlueFruit, check out the coming soon photos. We went to Washington Square Park at night to test how far we could change the colors of the NeoPixels on the CPX Bluefruit and we’re going to need a bigger park to test in maybe 🙂

    Watch us test the CPX BlueFruit here!!

    IoT Projects

    Interactive Airplane Sculpture, beautiful and internet connected

    “The Imagination Machine” has been my main focus for a little over 9 months. I’m thrilled to see it in such a grand space. As you may read in the articles, it tracks the ISS using the NASA open API + Adafruit.io + IFTTT. It keeps time using the RTC. It also has some other codes onboard that I’m developing that will use more of NASA’s API (tracking near earth orbit asteroids, etc.) I had always intended for the piece to make a connection from country to country as well. At the moment, I’m currently on an artist residency in Dresden, Germany. It’s ongoing exploration includes allowing my new friends here in Germany to say “Hello” to the sculpture in Ohio from my phone. Using using the Adafruit.io and my phone, they can trigger a special light show that connects two different cultures located an ocean apart - Adafruit Blog

    Issue 21 HackSpace magazine: Air quality monitor

    The new HackSpace Magazine Issue 20 highlights an air quality monitor build using a Raspberry Pi 4 and air quality sensor. The project is programmed in Python 3 with the Adafruit Adafruit IO data service (free at io.adafruit.com) holding data and providing status - Adafruit Blog

    Analog Smart Shelf

    Jake P. on HackADay.io is building “A sleek and minimalist wall-mounted shelf with hidden wireless charger and customizable wooden display”. Unlike most smart-assistants, it’s designed to be unobtrusive - HackADay.io

    Tweeting with CircuitPython

    This guide shows how to use the Twitter API to get tweets from a specific user (but there’s a lot more you can do with it). As a concrete example, it will be used to regularly fetch the the latest tweet from @codewisdom, a feed that tweets quotes from the software industry. We’ll take those tweets and display them on a PyPortal - Adafruit Learning System

    Using WoTT to manage your Adafruit IO feeds!

    Web of Trusted Things (WoTT) published an guide about using Adafruit IO with their WoTT Secure Agent, an open-source solution designed to manage your credentials (such as your static Adafruit IO username/active key pair) - Web of Trusted Things

    Working on an IoT Project? Tell us about it!

    Are you working on a project which uses Adafruit IO or Adafruit products?? Add the #adafruitio or #adafruitiot hashtags to your tweets, join our Discord channel (http://adafru.it/discord#help-with-adafruit-io), or join the SHOW-AND-TELL every Wednesday night at 7:30pm ET on Google+ Hangouts.

    Around the Internet - IoT News and Shortlinks

    Rick Merritt reports LoRa and NB-IoT could claim 86% of all Low-Power-Wide-Area-Networks (LPWAN) by 20203, that’s not too far away!

    The TTGo T-Call is a $15 ESP32 Breakout with an onboard Cellular Modem

    Sonoff Homekit is a bridgeless (no Raspberry Pi required!) HomeKit Setup.

    FabGL - Advanced graphics for the ESP32 (VGA, PS/2, keyboard/mouse, sound engine, game engine, ANSI/VT terminal)

    Hacking a LOHAS LED Smart Bulb

    ludzinc is building an internet-enabled garage door opener.

    View the weather report on a PyPortal and log detailed information about it to an Initial State Dashboard.

    If you’re new (or slightly experienced) with MQTT - Ably.io took a deep-dive into MQTT’s internals.

    FabLabEU built a GPS Mapper to map coverage of The Things Network.

    Isaac Wellish built a an internet-connected PyPortal Trivia Time game.

    Remotely display the status of a ThingsNetwork node over MQTT with this MQTT Remote Display.

    Soothe a six-month old with a remotely-controlled MP3 sound machine.

    Monitor your home’s energy with an ESP32 and (semi-safe) CT-sensors.

    vikkey321 on GitHub built a Not-so-dumb smoke detector with Google Assistant integration

    What is Adafruit IO?

    Adafruit.io has over 14,000+ active users in the last 30 days and over 750+ Adafruit IO Plus subscribers. Sign up for Adafruit IO (for free!) by clicking this link. Ready to upgrade? Click here to read more about Adafruit IO+, our subscription-based service. We don’t have investors and we’re not going to sell your data. When you sign up for Adafruit IO+, you’re supporting the same Adafruit Industries whose hardware and software you already know and love. You help make sure we’re not going anywhere by letting us know we’re on the right track.

  • Adafruit IOT Monthly: Mid-Century Modern Weather Station, Raspberry Pi 4 and more!

    Adafruit IO Update

    Adafruit IO’s Zapier Integration in the Zapier App Directory!

    The Adafruit IO Zapier integration is officially listed in the Zapier Application Directory! Have a zap you’d like to connect with Adafruit IO? Head over to the Zapier application directory and search for Adafruit IO! - Read the announcement here!

    NEW IoT Hardware: Adafruit AirLift Shield - ESP32 WiFi Co-Processor

    Our new AirLift Shield connects your Arduino-compatible project to the Internet! It’s easy to use the Adafruit AirLift breakout with CircuitPython and the Adafruit CircuitPython ESP32SPI module, or Arduino and the WiFiNINA library. If you have a favorite Arduino or Arduino-compatible like the Metro M4 or Metro 328p - installing this shield is a snap.

    Ready to add WiFi to your Arduino project? Head over to the product page for the AirLift Shield.

    Check out our learning guide for schematics, files, and how to get started using AirLift within minutes.

    NEW IoT Hardware: Raspberry Pi 4 Model B - 1GB/2GB/4GB RAM

    The Raspberry Pi 4 Model B is the newest Raspberry Pi computer made, and the Pi Foundation knows you can always make a good thing better! And what could make the Pi 4 better than the 3? How about a faster processor, USB 3.0 ports, and updated Gigabit Ethernet chip with PoE capability? Good guess - that’s exactly what they did! The Raspberry Pi 4 is the latest product in the Raspberry Pi range, boasting an updated 64-bit quad core processor running at 1.5GHz with built-in metal heatsink, USB 3 ports, dual-band 2.4GHz and 5GHz wireless LAN, faster Gigabit Ethernet, and PoE capability via a separate PoE HAT.

    Head over to the product page to pick one up - note that there are three versions of this with different amounts of RAM.

    IoT Projects

    Mid-Century Modern Weather Gauge

    Frustrated that modern indoor weather displays didn’t fit a mid-century aesthetic, Andy Allen retrofit a clock with a custom-face and motorized gauges to display weather pulled from the internet using a Particle Photon. This is an impressive build and an aesthetically pleasing piece of IoT hardware - PowerfulMojo Blog

    Using Particle Photon with Adafruit IO

    Maker.IO published a new guide and video for using Adafruit IO with the Particle Photon board. This is a detailed guide and uses the latest Adafruit IO Arduino library for Particle. - DigiKey

    Connecting an Arduino Uno WiFi Rev2 to Adafruit IO

    Do you have an Arduino WiFi Rev2? If so, we have good news! The latest Adafruit IO Arduino library is compatible with the Arduino WiFi Rev2. WoolseyWorkshop’s blog posted an in-depth tutorial about connecting this board to the outside world. - WoolseyWorkshop

    Smarter Window Fans

    Granpino built a smart-window fan to keep their room cool. It automatically turns on when the outdoor temperature is cooler than the inside temperature. - Hackster.io

    ESPBoy brings WiFi to gaming platforms

    RomanS’ HackADayPrize 2019 entry is the ESPBoy, an open-source ESP8266-based gaming platform with wireless internet. hackaday.io

    Working on an Adafruit IO Project? Tell us about it!

    Are you working on a project which uses Adafruit IO? Add the #adafruitio hashtag to your tweets, join our Discord channel (http://adafru.it/discord#help-with-adafruit-io), or join the SHOW-AND-TELL every Wednesday night at 7:30pm ET on Google+ Hangouts.

    Around the Internet - IoT News and Shortlinks

    @kiwibryn is using a Raspberry Pi LoRa field gateway as a method of interfacing NetDuino and Arduino devices to Adafruit IO. STEM education with IOT! - Twitter

    Max Holiday is sending caliper measurements to a spreadsheet with CircuitPython and a SAM32 developer board. - Twitter

    @300lines on twitter is enjoying the many MQTT abstractions provided by the Adafruit IO Arduino library - Twitter

    Give your Raspberry Pi the gift of sight with TensorFlow 2.0 and computer vision. Low-cost object detection and classification is possible for around $100 Medium

    What is Adafruit IO?

    Adafruit.io has over 14,000+ active users in the last 30 days and over 750+ Adafruit IO Plus subscribers. Sign up for Adafruit IO (for free!) by clicking this link. Ready to upgrade? Click here to read more about Adafruit IO+, our subscription-based service. We don’t have investors and we’re not going to sell your data. When you sign up for Adafruit IO+, you’re supporting the same Adafruit Industries whose hardware and software you already know and love. You help make sure we’re not going anywhere by letting us know we’re on the right track.

  • Adafruit IOT Monthly: Azure IoT meets CircuitPython, build an internet-connected wearable love pendant, and more!

    Adafruit IO Update

    Adafruit IO on Awesome Lists

    Adafruit IO has made its way into the Awesome List! Awesome provides lists about all kinds of interesting topics, and Adafruit IO is now a part of to the Awesome master list!

    AirLift FeatherWing – ESP32 WiFi Co-Processor

    Our new AirLift FeatherWing connects your Feather-based project to the Internet! It’s easy to use the Adafruit AirLift breakout with CircuitPython and the Adafruit CircuitPython ESP32SPI module, or Arduino and the WiFiNINA library. If you have any feather-compatible board, adding a FeatherWing is a snap! Check out the learning system guide for this board to learn more…

    M5Stack Basic Core IoT Development Kit - ESP32 Dev Board

    The M5Stack Basic Development Kit is a ESP32-based WiFi microcontroller that’s compatible with MicroPython and Arduino. It comes jam-packed with WiFi / Bluetooth capability, running at 240 MHz with the dual-core processor and 4MB of SPI Flash. This kit is perfect for people who want to make advanced ESP32 projects with a display, user interface, speaker, and a couple buttons. It’s super easy to snap in other M5 blocks to add sensors, interfaces or cameras, no soldering required. Sounds like the right board for you? Pick one up from Adafruit!

    GUIDE UPDATE: Welcome to Adafruit IO

    We’ve updated our Welcome to Adafruit IO Guide to include information about Adafruit’s latest WiFi AirLift hardware and details about connecting your CircuitPython project to Adafruit IO. We’ve also added links to our new, hosted Adafruit IO MQTT and REST API documentation pages. Read the guide on the Adafruit Learning System here…

    IoT Projects

    Summer is coming, build an AQO (Air Quality Object) to notify you when the air around you is stale. The Air Quality Object changes color depending on air CO2 content. It’s meant to be a beautiful object which also passively displays information about the surroundings. It makes a normally invisible flow visible, so you can open a window when your air is getting stale - GitHub

    In a long-distance relationship? Want to share your feelings with a loved one who is not physically close to you? Techiesms on YouTube has a 2-part video series about building an Internet-connected love pendant. The first part covers their motivation behind the project and the second video explains the technical side of the build - Youtube

    Where is the International Space Station right now? Well, wherever it is, it won’t be there for long. The ISS is always on the move and doing so very quickly. Build an ISS Tracker using a PyPortal to display the current location of the ISS by following this guide - you’ll learn how to parse an API using a PyPortal. Read the learning guide on the Adafruit Learning System here…

    Evaluating IoT cloud platforms can be difficult, and often requires buying separate hardware to connect with each platform. Avilmaru wrote a guide for using the Arduino MKR WiFi 1010 with both the Arduino IOT Cloud and our Adafruit IO service - Arduino Create

    Keep forgetting to water your plants? Want to monitor the ambient temperature of your the room your plant is located in from across the world? In this guide, you will build an Internet-enabled plant monitoring display by combining Microsoft’s Azure IoT Hub and CircuitPython! Using Azure with your CircuitPython IoT projects allows you to rapidly prototype (and even mass-prototype) advanced Internet-of-Things devices and connect them to Microsoft Azure services - Read the guide on the Adafruit Learning System.

    Working on an Adafruit IO Project? Tell us about it!

    Are you working on a project which uses Adafruit IO? Add the #adafruitio hashtag to your tweets, join our Discord channel (http://adafru.it/discord, #help-with-adafruit-io), or join the SHOW-AND-TELL every Wednesday night at 7:30pm ET on Google+ Hangouts.

    Around the Internet - IoT News and Shortlinks

    Espressif announced a new ESP32! It’s an ESP32-S2 with USB support and 40 GPIOs along with capacitive touch IOs and peripheral support. It does drop a core, running a Xtensa single-core 32-bit LX7 microcontroller instead of a dual-core LX6 like the ESP32. - Espressif Blog

    Improving the safety of the food you eat with IoT - EETimes

    Reverse engineering a not-so-secure IoT Device - MCUOneEclipse The IoT cult classic

    Little Printer is back with a new app, webhooks, open-source software and more! - nordprojects

    Azure IoT CircuitPython module released; do more advanced projects with CircuitPython - GitHub Bill Schweber wonders Whatever Happened to the Hardware On-Off switches? - EETimes

    What is Adafruit.IO?

    Want to make your project talk to the Internet? Connect your existing project to the Internet to log, stream, and interact with the data it produces? What about all this Internet-of-Things (IoT) stuff?

    Adafruit IO is a platform designed (by us!) to display, respond, and interact with your project’s data. We also keep your data private (data feeds are private by default) and secure (we will never sell or give this data away to another company) for you. It’s the internet of things - for everyone! Adafruit.io has over 14,000+ active users in the last 30 days and over 750+ Adafruit IO Plus subscribers. Sign up for Adafruit IO (for free!) by clicking this link.

    Ready to upgrade? Click here to read more about Adafruit IO+, our subscription-based service. We don’t have investors and we’re not going to sell your data. When you sign up for Adafruit IO+, you’re supporting the same Adafruit Industries whose hardware and software you already know and love. You help make sure we’re not going anywhere by letting us know we’re on the right track.

  • Adafruit IO on Awesome Lists, a curated list of awesome Adafruit IO guides, hardware, guides, videos, libraries, frameworks, and resources. #AdafruitIO #Awesome @AdafruitIO

  • Adafruit IOT Monthly - May 2019

    AIO Update: Features, Stats, and More!

    aio-update

    IO Stats

    Adafruit.io has over 15,000+ active users in the last 30 days and over 700+ Adafruit IO Plus subscribers. Sign up for Adafruit IO (for free!) by clicking this link.

    Ready to upgrade? Click here to read more about Adafruit IO+, our subscription-based service. We don’t have investors and we’re not going to sell your data. When you sign up for Adafruit IO+, you’re supporting the same Adafruit Industries whose hardware and software you already know and love. You help make sure we’re not going anywhere by letting us know we’re on the right track.

    Adafruit IO on Reddit

    Adafruit IO now has a dedicated subreddit! Subscribe over at /r/AdafruitIO to add the latest Adafruit IO news to your Reddit Front Page.

    Awesome Adafruit IO

    Awesome Adafruit IO is a curated list of awesome Adafruit IO guides, videos, libraries, frameworks, software and resources. Inspired by the Awesome lists. It will be updated by the team & community - we’re looking for contributors!

    Stop by and check it out awesome-circuitpython and keep reading!

    Adafruit IO Plus Plan Upgrades Are Here!

    io-plus-plan

    One of the most consistent requests we’ve had since we launched IO Plus (IO+) was for a way to raise the IO+ account limits even further.

    We’re happy to announce that with an Adafruit IO+ subscription, you can now add data rate and storage time limit upgrades!

    Library Update: Adafruit IO Arduino

    If you have a shiny new piece of Adafruit WiFi AirLift hardware and want to use it with Arduino - you’re in luck! The Adafruit IO Arduino library has been updated to v3.1.0, including an update for using AirLift boards (such as the PyPortal or Metro M4 WiFi Lite) or breakouts.

    Grab the new release from the Arduino Library Manager or download it from the Adafruit GitHub.

    New IOT Hardware from Adafruit

    Adafruit’s new WiFi boards have arrived. Both of these boards come with AirLift - our witty name for the ESP32 co-processor - and are compatible with both Arduino and CircuitPython. All AirLift boards can also connect to Adafruit IO.

    Adafruit AirLift – ESP32 WiFi Co-Processor Breakout Board

    airlift-esp32

    Give your plain ol’ microcontroller project a lift with the Adafruit AirLift - a breakout board that lets you use the powerful ESP32 as a WiFi co-processor. You probably have your favorite microcontroller (like the ATmega328 or ATSAMD51), awesome peripherals and lots of libraries. But it doesn’t have WiFi built in! So lets give that chip a best friend, the ESP32. This chip can handle all the heavy lifting of connecting to a WiFi network and transferring data from a site, even if it’s using the latest TLS/SSL encryption (it has the needed root certificates pre-burned in). This breakout includes a crypto chip, too!

    Want to pick one up? Visit the Adafruit Store!

    Adafruit Metro M4 Express AirLift (WiFi) - Lite

    airlift-m4

    Give your next project a lift with AirLift - our witty name for the ESP32 co-processor that graces this Metro M4. You already know about the Adafruit Metro M4 featuring the Microchip ATSAMD51, with it’s 120MHz Cortex M4 with floating point support. With a train-load of FLASH and RAM, your code will be fast and roomy. And what better way to improve it than to add wireless? Now cooked in directly on board, you get a certified WiFi module that can handle all your TLS and socket needs, it even has root certificates pre-loaded. Since this is a lite version of the AirLift module, it has a 8MB flash and no crpyto chip.

    Want to pick one up? Visit the Adafruit Store!

    Powered by Adafruit IO: Projects from the Community

    Low Cost Internet Enabled Voltage and Current Logger

    voltage-current

    Darian Johnson “needed a low cost way to measure current requirements and battery drain over time” for one of his wearable projects. He also had a “TON of Adafruit Feathers and FeatherWings, so [he] decided to use components [he] already had, plus an Adafruit INA219 FeatherWing to build a voltage and current logger which logs to SD card and Adafruit IO

    Smart HDMI Switcher with Adafruit IO and IFTT

    hdmi-switch

    Scriptmonkey_ on twitter did a bit of hacking this past Easter weekend connecting their HDMI switcher to the internet. To avoid the remotes piling up on their coffee table, or getting up from their couch, they used an ESP8266 connected to an Amazon Alexa over If-This-Then-That to voice-control their TV’s inputs.

    Adafruit IO Raspberry Pi Cloud Camera Tutorial

    Interested in sending different types of data to Adafruit IO? IOTDesignPro published a very detailed tutorial for streaming the camera’s images (as data) from a Raspberry Pi using MJPG-streamer over the internet to an Adafruit IO Dashboard.

    Mini IOT Display with PushBullet Notifications

    iot-display-mini

    Labsud built a Mini Connected Display to show messages received from an Adafruit IO Feed using a EspressIf WeMos D1 Mini and a ST7789 TFT display. They also set up IFTTT to display notifications from their smartphone to their display with Adafruit IO’s IFTTT integration.

    Working on an Adafruit IO Project? Tell us about it!

    Are you working on a project which uses Adafruit IO? Add the #adafruitio hashtag to your tweets, join our Discord channel (http://adafru.it/discord, #help-with-adafruit-io), or join the SHOW-AND-TELL every Wednesday night at 7:30pm ET on Google+ Hangouts.

    New Adafruit Learning System Guides

    Have you heard about making, cosplay and electronics, but don’t know where to start? Visit the Adafruit Learning System for over 1700 tutorials for electronics projects, ideas and techniques! We’ve selected a few of our favorite internet-of-things-based guides from the learning system:

    ePaper FeatherWing Quote Display

    quote-display

    Build this quote display using the Adafruit HUZZAH32 (ESP32) Feather and ePaper FeatherWing. Add a LiPo battery and you have a portable quote display.

    Read the guide here…

    Data Logging IOT Weight Scale

    How many grams of coffee did I add to my pour-over? Is the bag of cat food empty? Did I remember to water the plant? What’s the weight of these screws in my workshop? To answer these questions (and more), you’re going to build an internet-enabled scale to track weight data over a period of time.

    Read the guide here…

    PyPortal Tides Viewer

    tides-viewer

    Surfs up! Or is it? This guide will show how you can use an Adafruit PyPortal smart display to easily fetch tide information from the Internet and display it.

    Read the guide here…

    PyPortal Philips Hue Controller

    In this Learn Guide, you’ll be building a touchscreen lighting controller with an Adafruit PyPortal to control a light, or groups of lights, connected to a Philips Hue bridge.

    Read the guide here…

    PyPortal Weather Station

    weather-station

    Harness the power of nature with your PyPortal by building an internet-connected Weather Station!

    Read the guide here…

    Adafruit IO Basics: AirLift

    airlift

    If you want to the best way of bringing your project online - combine Adafruit IO and AirLift! Our ESP32-based AirLift boards and breakouts are the newest way to connect your project to Adafruit IO, our internet-of-things service for everyone!

    Read the guide here…

    Multi-Sensor IoT Environmental Sensor Box With CircuitPython

    iot-box

    This guide will walk you through making an environmental monitoring device with GPS, Temperature, Humidity, Barometric Pressure, and Air Quality sensors, all updating to the cloud. Once build, this project takes readings occasionally and sends them to Adafruit IO, stamped with time and location. All that is required is an AC outlet and a WiFi network.

    Read the guide here…

    Around the Internet

  • Adafruit IO Plus Plan Upgrades Are Here!

    One of the most consistent requests we’ve had since we launched IO Plus (IO+) was for a way to raise the IO+ account limits even further. We’re happy to announce that with an Adafruit IO+ subscription, you can now add data rate and storage time limit upgrades!

    The single biggest thing we do to make sure that Adafruit IO is available for as many people as possible 24 hours a day, 365 days a year is rate limiting the messages that pass through the system. For IO Free accounts, the rate limit is 30 messages per minute, or about 1 every 2 seconds. For IO+, we double the available data rate to 60 messages per minute, or about 1 per second. That’s double the data rate for everyone using IO+, but still a hard cap on usage.

    The new IO+ subscription upgrades are:

    • Data Rate can be boosted in 10 points per minute increments for $2 per month or $24 per year.
    • Data Storage can be boosted in 30 day increments for $5 per month or $60 per year.

    So if you want to double your data rate again from 60 to 120, that would be 6x Data Rate Boost @ $12 per month or $144 per year. If you wanted to double your data storage length from 60 days to 120 days that would be 2x Data Storage Boost @ $10 per month or $120 per year.

    You can upgrade or cancel upgrades at any point during your subscription billing cycle, but you will have to pay the full amount for the remaining time on your billing cycle when you activate an upgrade. For example, if you’re subscribed on the IO+ monthly plan and add a 10x Data Rate Boost ($20 per month) halfway through your billing cycle, you’ll be charged about $10 for the time remaining in the current cycle and $30 ($10 for IO+ plus $20 for 10x Data Rate Boost) on your next monthly bill.

    You can start the process by clicking “Change your IO+ plan” on your account billing page.

    Change your IO+ plan link highlighted

    Account changes form

    The prorated amounts are calculated when you add a subscription upgrade and you’ll have a chance to preview your new monthly bill before activating it.

    Preview account changes

    This is our first experiment with a new kind of subscription upgrade for IO+, please stop by the forums or our channel on the Adafruit Discord server and reach out if you have any questions!

  • Adafruit IoT Monthly - April 2019

    Welcome to the Adafruit IoT Monthly for the month of April. This newsletter (in blog form) highlights projects and updates about Adafruit IO – our Internet-of-Things Service for makers, news, stories, and advances in the world of IoT.

    Adafruit IO News: Features, Stats, and Updates

    IO News highlights what’s new on Adafruit IO, our internet-of-things service for makers.

    IO Stats

    Adafruit.io has over 15,760+ active users in the last 30 days and over 500+ Adafruit IO Plus subscribers. Sign up for Adafruit IO (for free!) by clicking this link. Ready to upgrade? Click here to read more about Adafruit IO+, our subscription-based service. We don’t have investors and we’re not going to sell your data. When you sign up for Adafruit IO+ you’re supporting the same Adafruit Industries whose hardware and software you already know and love. You help make sure we’re not going anywhere by letting us know we’re on the right track.

    Sneak Peek: New Adafruit IO API Docs!

    https://www.youtube.com/watch?v=DZOPQXRH9RI&feature=youtu.be

    While our current API documentation works, we’ve been brainstorming ideas to make it better and easier-to-use. Here’s a small list of the features we’re planning on adding: * Easy to Contribute to: While our pre-existing API is public on GitHub, it is not the easiest to contribute to (the v2 HTTP API sits at just over 4000 lines of JSON). The new documentation will be easier to contribute to - it’s all in everyone’s favorite formatting syntax - Markdown! * You can access Adafruit IO’s API over either MQTT or HTTP - we’re adding dedicated documentation pages for both the MQTT and the HTTP APIs. * Writing some code and not sure how to get the last known data value of your feed? Don’t want to read through lines of example code - just need the code? We’ll be including code-snippets for CuRL, Arduino CPP, Python, CircuitPython, and Ruby.

    Read more…

    Adafruit IO’s Zapier Integration is now in Early Access!

    The Adafruit IO Zapier integration is now a public Zapier integration (currently in early-access)! While we’ve made a lot of Adafruit IO projects which use Zapier, people would need to enter a special “invite” URL as we did not have enough people actively using the service and Adafruit IO together. As of today, the “invite” URL is replaced by an official Zapier integrations URL and landing page - https://zapier.com/apps/adafruit-io/integrations.

    Read more…

    All The Internet of Things Episode 4, Adafruit IO

    https://www.youtube.com/watch?v=yRqazWCtSgI Want to learn more about Adafruit IO? We’ve released an episode of All The Internet of Things episode featuring Adafruit IO.

    Hello, and welcome to episode 4 of Adafruit and Digi-Key’s “All the Internet of Things”! A six-part series that covers everything you need to know about IoT. In the previous episode, we discussed services –services are what you use to route events to and from your IoT devices, coordinate real-time communication between multiple devices, and record, process and visualize the data that your “things” are producing. We also talked about some large cloud services such as Amazon AWS IoT, Google Cloud IoT, and Microsoft Azure IoT Suite. You might find that although these services provide robust security and sophisticated deployment tools, getting started with using their comprehensive technology is intimidating. If only there were some IoT service that proved easy to understand and implement…maybe with high quality documentation with examples, learning guides, and community support…and, maybe just maybe, an IoT service that provided opens source solutions with a low to no-cost point of entry… Well, on today’s episode, we’re happy to do a formal introduction to just that – our very own Adafruit IO!

    We have an interactive learn guide here with accompanying clips and text from the video!

    Powered by Adafruit IO: Projects from the Community

    Each month, we select our favorite projects from around the internet which use Adafruit IO. Here are some of our favorites:

    Monitor Your Garage Door with #FeatherHuzzah #AdafruitIO and a Pi Zero W

    There are lots of garage door monitor projects on hackster.io and other Maker sites. Many are single-purpose solutions. I wanted a project that would be extensible, to build on the skills learned for future IOT projects. In fact, I already had a project in mind, a general notification platform called the Kinetic Courier. That project could include a garage door monitor as an example notification trigger. Also, I wanted a platform that was well-documented and well-supported. Adafruit’s cloud service for Makers, adafruit.io, fit the requirements. In addition, I was motivated by personal need. My nice neighbors had, once too often, called late at night to remind me the garage door was open 😉

    Read more…

    IOT Office Door Sign using PyPortal

    Mike Renfro designed a custom office door sign using the PyPortal to display his current status and the status of his university’s high-performance-computing clusters

    Blood Glucose on a PyPortal

    Scott Hanselman is displaying his blood glucose levels in real-time from a nightscout software on a PyPortal

    Google Assistant Based Home Appliance Control using ESP32 and Adafruit IO

    If you have a home appliance which you want control over the internet and don’t want to shell out the cost of a smart-plug – this tutorial may be the right choice. Using an ESP32 module, a relay module and Adafruit IO – you can control any AC home appliance over the internet. This tutorial walks you through the process of wiring the ESP32, setting up Adafruit IO, and creating a dashboard. But, instead of flipping a digital switch – what about controlling the lights using your voice? The guide also walks through the process of connecting to Google Assistant using IFTTT (a supported Adafruit IO Integration) and sending voice commands to the light switch.

    Read more…

    Adafruit IO-Powered PowerPoint Slide Controller

    James Bulpin “was looking for a really simple solution to bounce messages via the cloud without all the complexity of a full IoT hub solution” and discovered Adafruit IO. He quickly built a mobile PowerPoint slide controller. If you’re not counting his phone’s web browser displaying an Adafruit IO dashboard, it uses no extra electronics. Instead, he’s running a .NET MQTT client on the same computer to send events to Microsoft Powerpoint. To send data to his computer, he built a drag-and-drop dashboard on Adafruit IO to interact with MQTT feeds.

    Read more…

    Meeting forecast? Glance at this CircuitPython-Powered PyPortal!

    Ronhiltz got his PyPortal up and running – but what to display on the 3.2″ 320 x 240 color TFT internet-connected display? Ron converted a picture of his office into a BMP, created a feed on Adafruit IO, and is using a PyPortal to show how their office is meeting forecast. Great work! With the PyPortal and the CircuitPython Adafruit IO library – it’s never been easier or quicker to create an Internet-connected project!

    Read more…

    Sending Data to the Cloud – ESP8266 Arduino Tutorial, Part 3

    Alexander has been writing a large ESP8266 tutorial series on HackADay.io about the versatile ESP8266. In the third installation of his guide, he walks through the process of sending data from sensors connected to an ESP to an REST API – Adafruit IO.

    Read more… Are you working on a project which uses Adafruit IO and want to show it off? Add the #adafruitio hashtag to your tweets, join our Discord channel (http://adafru.it/discord, #help-with-adafruit-io), or join the SHOW-AND-TELL every Wednesday night at 7:30pm ET on Google+ Hangouts.

    New Adafruit Learning System Guides

    Have you heard about making, cosplay and electronics, but don’t know where to start? Visit the Adafruit Learning System for over 1500 tutorials for electronics projects, ideas and techniques! We’ve selected a few of our favorite internet-of-things-based guides from the learning system:

    IoT Motion and Temperature Logger with the Analog Devices ADXL343 + ADT7410 Sensor FeatherWing and Adafruit IO

    If you’re looking to for a way to monitor and send precise motion and temperature data to the cloud, check out this new guide. Analog Devices, known for their reliable and well-documented sensor chips – has a high precision and high resolution temperature sensor – the ADT710 – and a triple-axis accelerometer – the ADT7410. We made a FeatherWing to make these sensors easier to use together. Even better? We can easily bring the FeatherWing online using a Feather ESP8266 HUZZAH and Adafruit IO.

    Read more…

    PyPortal Email Display with Zapier and Adafruit IO

    Want to write a message to your PyPortal’s display? Perhaps you’d like to easily add and change text on your PyPortal’s display to use it as a smart sticky-note, or have people email it directly! Using Zapier, you will set up a Zap to receive email via a custom Zapier email address at zapiermail.com and forward it to an Adafruit IO Feed. With some CircuitPython Code, your PyPortal will be obtaining the current value of an Adafruit IO Feed and updating the display with the email sender address and the subject line.

    Read more…

    NEW GUIDE: PyPortal Bitcoin Display

    Keep up to date on the current value of Bitcoin or your total wallet value with the PyPortal Bitcoin Display! The simple version of this project will display the current value of Bitcoin in one of three currencies — USD, Euros, or GBP. The slightly more complex version uses a text transform to present the total value of your Bitcoin wallet based upon the current Bitcoin value and number of coins owned. All made in CircuitPython running on the PyPortal accessing the Coindesk API wirelessly!

    Read more… Join us in the forum or on Discord in the help-with-adafruit-io channel with questions, comments, or suggestions. We’d love to hear from you!

  • Adafruit IO Sneak Peek: New Adafruit IO API Docs! #API #HTTP #MQTT @adafruitio

    [![youtube still](/blog/images/2019-03-28-yt-still.png)](https://www.youtube.com/watch?v=DZOPQXRH9RI&feature=youtu.be)

    The Adafruit IO team is in the middle of building out a shiny new API documentation website. While updating a website for documentation doesn’t sound exciting - we have a feeling you’ll like what’s coming soon. While our current API documentation is functional, we’ve been brainstorming ideas to make it better and easier-to-use.

    Here’s a small list of the features we’re planning on adding: * Easy to Contribute to: While our pre-existing API is public on GitHub, it is not the easiest to contribute to (the v2 HTTP API sits at just over 4000 lines of JSON). The new documentation will be easier to contribute to - it’s all in everyone’s favorite formatting syntax - Markdown! * You can access Adafruit IO’s API over either MQTT or HTTP - we’re adding dedicated documentation pages for both the MQTT and the HTTP APIs. * Writing some code and not sure how to get the last known data value of your feed? Don’t want to read through lines of example code - just need the code? We’ll be including code-snippets for CuRL, Arduino CPP, Python, CircuitPython, and Ruby.

    Are you excited for the next version of the Adafruit IO API Documentation? Have features or suggestions to propose? Post up on the forum topic for this here or leave a comment below!

    Join us in the forum or on Discord in the adafruit-io channel with questions, comments, or suggestions. We’d love to hear from you!

  • Adafruit IO Update: New Line Chart and Gauge Rendering

    Hello Adafruit IO community!

    In order to reduce the amount of Javascript we send to your browser every time you visit Adafruit IO and in order to fix an annoying memory leak bug, we’ve replaced the rendering engines for the gauge and line charts you see on your Adafruit IO dashboards and feed pages. They’re low-level updates to the Adafruit IO website you all use. For the most part the changes should be invisible, but we wanted to at least mention it in case they take you by surprise.

    New gauge and line charts on an Adafruit IO dashboard

    The question you may have, then, is why fix what isn’t (obviously) broken? I’m glad you asked! We made this update for two big reasons and one small one.

    First, we’ve known for a loooong time that we have a big memory leak problem with line charts. If you’ve tried to keep a dashboard open with a line chart for more than a day, you might have noticed that you eventually came back to a frozen browser tab. If you’re unlucky, you might’ve found a crashed browser. :( Even after long hours of debugging in multiple browsers, tracing live code, and rewriting parts of the chart rendering pipeline, it’s still not clear where the problem was. It could’ve been the library we were using–an SVG based renderer–or code we wrote on top of it, but we were pushing some part of the system beyond what it could handle. By replacing the old SVG based system with a canvas based charting library we eliminate the type of memory leak we were encountering. The bonus with choosing a charting library with more options for chart types is that we’ll soon be able to introduce those to you on the dashboards. Look for that in the next few months.

    Second, our old gauges and line charts used a lot of code behind the scenes–the immensely powerful d3 library–to do just a little bit of work. We have intentionally kept our charts simple and clean, visually, but we included ~200 extra KB of uncompressed javascript code to do it. By replacing the gauge with a much smaller, hand built canvas-based plugin and line charts with a simpler library (even though it’s still powerful), we cut that code out of the bundle we have to ship to your browser. We’re sending 800KB+ of compressed/gziped, too much in our opinion, but we’re working on it :D

    Small changes that hopefully produce benefits long into the future.


    Let us know if our updates aren’t working for you or are otherwise affecting your quality of life. Join us in the forum or on Discord in the adafruit-io channel with questions, comments, or suggestions. We’d love to hear from you!

  • Adafruit IO New Feature: Interactive Dashboard Guide @adafruitio #IoT

    If you’ve logged into our internet of things service - Adafruit IO - recently, you may have noticed a new question mark icon on your dashboards.

    Click this button to launch an interactive dashboard guide.

    You’ll add a block

    Connect a feed

    Edit the block

    Make the dashboard look just right, and then save your work once everything looks the way you want it to To get started, click the blue question mark icon on an existing Adafruit IO dashboard.

    Don’t have an Adafruit IO account? You can link your Adafruit IO username - and signing up is free.

  • Adafruit IO Internals: Pagination

    Attempting to access the data points on your Adafruit IO feed and only receiving 1000 data points back? kevinljxljx on the Adafruit IO Forum was running into the same issue:

    I am trying to use the data from adafruit.io with my project, but no matter what I try, adafruit.io only gives 1000 data points to my javascript program. ( I am using XMLHttpRequest). I tried to set limit to 2000 but without luck. ( I have 1200 or so data points under my feed). Is the maximum data points I can get is 1000? or am I missing something?

    Adafruit IO’s API only returns 1000 data points at a time. To get the rest of the data (if your feed is over 1000 data points), you’ll need to “paginate” the data.

    What does this mean?

    When you perform a data query, the results are always sorted newest-to-oldest and include *x-pagination-** headers. For example:

    X-Pagination-Limit: 1000  
    X-Pagination-Total: 84548  
    X-Pagination-Start: 2019-02-11T22:52:18.103+0000  
    X-Pagination-End: 2019-02-12T16:03:00.694+0000  
    X-Pagination-Count: 1000
    

    Limit (X-Pagination-Limit) is either the requested limit or 1000, whichever is less; Total (X-Pagination-Total) is the total number of data points in the feed. Note, this value may be up to 5 minutes behind real time.

    Start (X-Pagination-Start) is the timestamp on the oldest value; End ( X-Pagination-End) is the timestamp on the newest value; and Count ( X-Pagination-Count) is the number of data points in the current request.

    Whenever Limit and Count are both 1000 and Total is more than 1000, that’s evidence that more data is available.

    You can get the next 1000 data points by using the X-Pagination-Start value OR the created_at value of the oldest data point in the API response as the end_time parameter in your next request to the data API.

    When visualized on a timeline, the concept of pagination looks like this: api-pagination.png

    Note that long running, frequently updated feeds could have more than a hundred “pages” of data. If you make requests without a delay in between, you could hit a rate limit. To avoid this, watch for 429 HTTP error responses and handle them in code by adding a 30 second timeout between requests.

    Regarding the data storage and feed history, storage size in this instance is the per-data point value size limit.

    With history on, meaning we preserve every data point, each data point value can be at most 1KB. With history off, meaning we only preserve the most recent data point, each value can be at most 100KB.

    Post originally written by AdamB on the Adafruit IO Forum, read the entire thread here…

  • Adafruit IO Update: Quick Help

    Need help getting started with Adafruit IO? Not sure what feeds are? Need a place to ask questions, but there are too many links on the internet? The Adafruit IO Team has added a new help menu directly into Adafruit IO with mini-guides designed to help you through any questions you could have about Adafruit IO, such as… How do I get started with Python? Follow the new Getting Started with Adafruit IO Python mini-guide… or “What is metadata, and how does it relate to my Adafruit IO Project?” Still have more questions? Having an issue with your code? We’ve also added links to our Discord Chatroom and the Adafruit IO Forum to the Quick Help menu - no googling necessary!

    To check it out, log into Adafruit IO (if you don’t have an account, create one - it’s free!) and click the Get Help button on the sidebar.

    Want to see anything else added to the Quick Help box? Let us know in the comments below!

  • adafruit.io – ” super easy, just works, no fuss, super fast to get a device online…” @hackaday @adafruit #iot #cloud

    Adafruit 2019 1369

    Hackaday posted up about a beta for a new cloud service, which at this time requires Arduino-only hardware: MKR1000 or MKR WiFi 1010. There’s a “passionate” debate in the comments about this direction, & the MKR1000 is “non-commercial” etc… more choices, the better, it’s a great time to make things and do IoT projects… Anyway, we saw a really nice mini-review of our adafruit.io service that can be used with any device…

    “I gave adafruit IO a try recently – super easy, just works, no fuss, super fast to get a device online, compatible with generic devices, open standards and protocols such as MQTT, working example code – nothing locked-in or proprietary.” - Luke.

    That’s why we made adafruit.io - We play nice with any device. The internet of things for everyone. The easiest way to stream, log, and interact with your data. We have, and will always have, a free version which can be used by any hardware, and we have a plus version for folks who want to run a biz and more on it, also - any hardware. In the last 30 days there are 12,459 makers, hackers, artists, and engineers, making something on adafruit.io - try it out today!

    Adafruit 2019 1367

    Tons of guides to get you started with the Internet of Things - learn.adafruit.com

    Adafruit 2019 1368 Adafruit IO ToS: No spam, no mining your personal data, easy to read and understand terms of service/use, etc.

    2016-09-12-Settings

    Want to export the Data from your account ASAP? It’s your data.

    940 Lrg-1 An Internet of Things Bill of Rights - Adafruit.

    Adafruit 2019 1370

    Adafruit’s blog of all the projects, resources, and community projects, tagged with #adafruitio & the adafruit.io changelog’ blog’

    Adafruit 10000 Discord Hero

    Join us on Discord for the adafruit.io channel!


    Built from the ground up to be easy to use. We do the hard work so you can focus on the fun stuff. Powerful API The same API that drives our user interface is available to you. We provide documentation so you can build a library in your favorite language to talk to IO, or use one of ours. It’s Your Data The data you store with IO is yours to manage and control. You can download it all anytime and we will never sell or give it away to another company. We feel strongly enough about this that we put it in our IoT Bill of Rights. Beautiful Dashboards Data won’t help you make better decisions or understand the world you’re living in unless you can see it. Charts, graphs, gauges, logging, and more are availble from anywhere in our carefully designed web-based dashboards. Private & Secure We won’t share your account information with anyone without your permission and everything you store on Adafruit IO is private by default, whether you’re a paying customer or not. Documentation We’ve written a lot more about Adafruit IO than just our web API. Teaching is at the heart of Adafruit, and our Learning Systemhas all the projects and guides you need to get started or to level up! Triggers Keep yourself and your systems up to date by automatically responding to changes. Triggers monitor your data to notify you when your temperature sensor gets too hot or when your DIY security system goes offline. Hardware We have been building Internet of Things devices and kits since long before Adafruit IO ever existed. Start your project with the right equipment or pick up the one last thing you need to finish. We’ve got hardware for all types of makers. Amazing Community We Love Makers! Join us on the forums, on our Discord chat server, stop by the weekly Show and Tell live stream to share your project, and subscribe to our YouTube channel to see what we’re up to.

  • Adafruit IoT Monthly - February 2019

    Welcome to the Adafruit IOT Monthly for the cold month of February (anyone out there making an internet-enabled hot-cocoa machine?). This newsletter (in blog form) highlights projects and updates about Adafruit IO – our Internet-of-Things Service for makers, news, stories, and advances in the world of IoT.

    Adafruit IO News: Features and Updates

    IO News highlights what’s new on Adafruit IO, our internet-of-things service for makers. There’s been some new updates to the platform since we’ve blogged an IoT Monthly.

    New Feature: Feed Webhooks

    For Adafruit IO, webhooks are unique URLs that you can use to send data to your feeds from anywhere on the internet, without having to share you IO API secret keys. They’re kind of like one-off API endpoints that you can manage separately from your security credentials and feed privacy. There have long been requests for “shared write access” to feeds, which can be done using the feed sharing feature already built into IO, but that requires everyone sending data to have an Adafruit IO account and use their credentials to send data. That, unfortunately, limits you from, for example, creating a simple web form to publish data directly to a feed.

    Read more about this feature on the Adafruit IO Development Blog

    Library Update: Adafruit IO Python

    https://cdn-learn.adafruit.com/assets/assets/000/057/153/original/adafruit_io_iopython.png?1530802073

    We’ve renamed the Python library for Adafruit IO to reflect the naming scheme for our other library - Adafruit IO Arduino. So, IO Client Python is now known as Adafruit IO Python. The IO Team has recently added a few services to Adafruit IO - Dark Sky for weather forecasting and a random data service to create random colors, words, numbers. Until now, you haven’t been able to use these services with the Adafruit IO Python library.

    The latest version of Adafruit IO Python (2.1) includes updated API and MQTT clients for using Adafruit IO’s random data and weather services.

    Powered by Adafruit IO: Projects from the Community

    Each month, we select our favorite projects from around the internet which use Adafruit IO. Here are some of our favorites:

    How to Automate your Home with Adafruit IO

    https://www.youtube.com/watch?v=JHmK6N-dhvM MakerIO published a new video on home automation using Adafruit IO. For the sake of simplicity, Robin uses two Huzzah boards to create a ping-pong application between the two of them. One board houses a button, which changes the state of the other board’s LED based on the first button. This simple example can be applied to home automation – one board could be used to control the lights in your home, the garage door, or anything wired up to a relay.

    Are you working on a project which uses Adafruit IO and want to show it off? Add the #adafruitio hashtag to your tweets, join our Discord channel (http://adafru.it/discord), or join the SHOW-AND-TELL every Wednesday night at 7:30pm ET on Google+ Hangouts.

    New Adafruit Learning System Guides

    Have you heard about making, cosplay and electronics, but don’t know where to start? Visit the Adafruit Learning System for over 1500 tutorials for electronics projects, ideas and techniques! We’ve selected two, internet-of-things-based guides from the learning system:

    LoRa/LoRaWAN Weather Logging Network

    Want to build your own network? This new guide uses the Adafruit LoRa radio bonnet with OLED and two Feathers with BME280 sensors to build a Weather Monitoring Network.

    Read more..

    Adding a WiFi Co-Processor to CircuitPython

    Adding a WiFi Co-Processor to CircuitPython Adafruit

    This guide will show you how to connect your CircuitPython board to the Internet by using an ESP8266 or ESP32 as the ‘Wireless modem’ – we’ll even show you how to upload the required AT command firmware to the chip, all from your CircuitPython board

    See this guide today - there’s even an example for posting to Adafruit IO!

    #IOTuesday: IOT News and Projects from around the ‘net

    We publish the latest and most interesting IoT news and projects from around the `net every Tuesday. Here’s some of our favorite recent stories.

    The SweRV RISC-V Core from Western Digital

    swerv-core

    Western Digital announced at the RISC-V Summit three new open-source innovations designed to support Western Digital’s internal RISC-V development efforts and those of the growing RISC-V ecosystem. In his keynote address, Western Digital’s Chief Technology Officer Martin Fink unveiled plans to release a new open source RISC-V core, an open standard initiative for cache coherent memory over a network and an open source RISC-V instruction set simulator.

    Read more on Business Wire

    TWIST is DIY Tweeting Weather Station

    twist-image

    Ever wanted to monitor your city’s Current Weather Conditions, Carbon Footprint, Noise and Pollution levels? Do you want be a Climate Change Crusader or set-up your own Tweeting Weather Station and share your local weather conditions with the world? Meet Tweeting Weather IoT Station aka TWIST – a DIY, Open-Source Environmental Monitoring and Meteorological Data Acquisition Platform.

    Read more

    IoT Camera Mover

    enter image description here

    In making videos for my projects I have often wanted to get a smooth shot of a part, such as a pan of an Arduino Nano. I have seen about 3 projects where people made devices that could pan a camera, but they were either not internet-connected or they were very expensive. So I set out to improve them.

    Read more

    The Internet of Unprofitable Things (never hardcode what you don’t own into an IoT device)

    epic-iot-fail

    Andy posts on The Ongoing Struggle a story that anyone developing an electronic product but especially an Internet of Things (IoT) product should heed. The subtitle is the NTPmare shortly after Christmas.

    Read more..

    How to control a device with a Kronaby smartwatch with IFTTT

    How to control a device with a Kronaby smart watch

    Via Mike Diamond on What I Made Today, a look at a special breed of watch that incorporates the characteristics of a regular watch (digital or analog), with select functions of the Smart Watch.

    The hybrid smartwatch that caught my attention was the small Swedish company, Kronaby. They specialize in beautifully-designed analog (hybrid) smart watches that radiate prestige, while quietly synchronizing with your phone. They offer multiple functions – applied through their simple, easy-to-use and equally well-designed app. This post is for general interest, but may be most useful to the Kronaby owner who wants to know what their IFTTT function is, and how to use it with their watch.

    Read more…

    Let us know how you’re using IO or IO+ on the forums or in our Discord chat room.

  • New Feature! Feed Webhooks

    New Feature: Feed Webhooks

    What’s a webhook? According to Wikipedia:

    A webhook in web development is a method of augmenting or altering the behaviour of a web page, or web application, with custom callbacks. These callbacks may be maintained, modified, and managed by third-party users and developers who may not necessarily be affiliated with the originating website or application.

    For Adafruit IO, webhooks are unique URLs that you can use to send data to your feeds from anywhere on the internet, without having to share you IO API secret keys. They’re kind of like one-off API endpoints that you can manage separately from your security credentials and feed privacy.

    There have long been requests for “shared write access” to feeds, which can be done using the feed sharing feature already built into IO, but that requires everyone sending data to have an Adafruit IO account and use their credentials to send data. That, unfortunately, limits you from, for example, creating a simple web form to publish data directly to a feed.

    There are a few use cases we’ve come up with so far, but we hope to be surprised with what the community can come up with. Here’s two things you can try.

    One-off IFTTT Applets

    First, other web services that can publish to Webhook URLs like IFTTT’s maker webhooks can be used to directly send data to a feed without entering Adafruit credentials or signing into your Adafruit IO account through IFTTT.

    IFTTT applet that makes a web request

    We already support IFTTT directly, but we can’t support every service that exists on the web. We can work with any service that knows how to send webhook-style requests, though :D

    Public write-only connections to IO feeds

    Second, webhook URLs can be used directly in simple HTML forms, to create a deploy-anywhere application that sends data directly to your feed. For example:

    <form target="_blank" action="https://io.adafruit.com/api/v2/webhooks/feed/dQTc61soU5S4tMv8jSuSjY9uSqVz" method="post">
        <label>
            Make a choice:
            <select name="value">
                <option value="YES" selected>Yes</option>
                <option value="NO">No</option>
            </select>
        </label>
        <button type="submit">Save my vote!</button>
    </form>
    

    And the actual form in action:

    After clicking “Save my vote!” you should see a standard Adafruit IO data record on a new tab, which means your vote was recorded. If you see a “request failed - Throttle error” message instead, that’s because this particular webhook URL’s data rate limit of 3 events per minute has already been reached.

    By setting a very low data rate for the webhook, I can share the URL publicly without risking my account, unlike sharing my Adafruit IO Keys. Even better, if the webhook ends up flooded with data, I can just delete it from my account to shut off the stream. And because webhook URLs are write-only, I don’t need to make the feed public.


    Publicly controllable Christmas light displays? Crowd-sourced weather monitoring system? GitHub -> Discord -> Adafruit IO cross-posting webhook circle of fun? Let us know what you come up with. Join us in the forum or on Discord in the adafruit-io channel with questions, comments, or suggestions!

  • New Feature: External Service Integrations

    Adafruit IO knows the weather!

    Or, more accurately, Dark Sky knows the weather and now Adafruit IO knows how to pass it on.

    But wait, there’s more!

    Adafruit IO ❤️’s Services

    We’re excited to introduce you to Adafruit IO’s new “External Service Integration” feature. Also known as “Service Integrations”, also known as “Services”. You can find a link to the new Services page in the navigation sidebar.

    service link in the IO navigation sidebar

    The first thing you may notice if you’ve used If This Then That (IFTTT) with Adafruit IO is that we moved that service over to the new Services page.

    External Service Integrations home page

    We’ve also started building out a Zapier integration–currently in private beta–so if you prefer Zapier to IFTTT or you’d just like to keep your options open, you’ll find that on the services homepage also.

    But the star of the show is the new Dark Sky-powered weather service.

    Weather Data in Adafruit IO

    We have wanted to add weather data to Adafruit IO for a long time, and even made an attempt more than two years ago. The biggest issues we faced are that: 1) free weather data services are inconsistent or have very low API limits and 2) even paid weather services often don’t include interesting weather data.

    With Dark Sky, we were able to overcome the second problem, but the first still puts some limits on the service we’re able to offer. This means that at launch the weather service is also our first IO Plus exclusive feature.

    When you create a new weather location, you have direct access to Dark Sky’s Developer API data through Adafruit IO with some minor limits. Specifically, we’re passing sending a subset of all available forecast data (~4KB of JSON) instead of all available forecast data (~30KB of JSON), and limiting MQTT subscriptions to just one type of data at a time. For example: just the current weather, 5 minute forecast, or 1 day forecast rather than all current and forecasted data with every update.

    The Weather API is available via HTTP GET requests or MQTT subscriptions from any authenticated device. IO Plus subscribers can find full documentation for the weather service on the weather service home page.

    This is just the first iteration of the Weather API and we’re very interested in hearing your feedback. If you’re an Adafruit IO Plus subscriber, give it a try and let us know what you think.

    Random Data Service

    Also available now, and to all Adafruit IO accounts, is our brand new Random Data Service! We’ve picked a few types of data (randomly, ha!) to generate and built the system in a way that allows separate Adafruit IO accounts to receive the same data based on the seed value used.

    Once every minute, MQTT subscribers get a brand new, hand-crafted (kind of), guaranteed random value. You could build a pair of one time password devices, a color-cycling sculpture, a nonsense Tweeting robot, a dice roller / coin flipper / choose your own adventure pilot…? We don’t know! We just built the thing and hoping that you’ll find an interesting use for it.

    We wrote a Ruby library to go along with it for generating word and color values and we’re 100% open to pull requests (celebrate Hacktoberfest with us!) or feature requests if you have an idea for new kinds of data that can be randomly generated.

    We’re Just Getting Started

    We’re going to be spending a lot of our time in the coming year connecting new services directly to Adafruit IO and improving our existing Triggers system. Keep checking back and please feel encouraged to get in touch with us on the Adafruit IO forum with any questions, concerns, or bug reports.

  • Dashboard Updates: Indicator and Icon Blocks, Drag-and-Drop Images

    We’re excited to tell you about two new blocks we’ve added to Adafruit IO dashboards this week to help you build richer interfaces. Icons and Indicators, two features that have been requested a lot in the last few years.

    Icon

    Icon blocks take a feed value and display the appropriate icon, when the feed value is a string selected from the collection shown here.

    click to download video

    You can use Icon blocks as live changeable visual displays by sending different values to the feed, as in the example above, or as permanent labels to improve the display of your data. Drop a text block next to an icon block on your dashboard and drop some icons into the text block to see how they look.

    Indicator

    Indicator blocks let you pick an ON color and an OFF color and then describe which state the Indicator block should be in based on conditions you set. The block compares the selected feed’s current value to the given conditions and chooses a color accordingly.

    indicator block settings with conditions highlighted

    You can use one condition or as many as you like. Conditions, by default, use Javascript’s parseFloat function to attempt to convert the feed’s current value and the condition values to a number for comparison. If either value, the feed or the string, can’t be converted to a number (isNaN(f_value) === true), then the condition is compared string-to-string.

    For example, I could create an indicator for a temperature sensor that stays in the ON state as long as the value is between 70 and 78.

    indicator condition in given range

    In Javascript, those conditions would be evaluated like this:

    function compare(feed_value) {
      return feed_value >= 70 && feed_value <= 78;
    }
    

    Or I could create an indicator that turns on whenever my feed matches a particular value.

    indicator condition in set

    In this case, the code equivalent would be:

    function compare(feed_value) {
      return feed_value === "ALPHA" ||
          feed_value === "BETA" ||
          feed_value === "GAMMA" ||
          feed_value === "BONANZA";
    }
    

    We don’t do any checking on your conditions to make sure they’re logically consistent. The conditions editor will happily let you enter impossible conditions (for example < 2 and > 2 or = 1 and = 0), so make sure to do your own testing before creating the block.

    You may notice in the block editor screenshot above that we’ve given you access the “Test Value” that’s used in the block preview. That should help in testing your conditional logic to make sure the indicator turns on and off at the times you are expecting. Set your conditions and play with the value to see when they trigger. No data is sent to IO when you change the test value, so it’s safe to play with settings on any block.

    BONUS! Drag and drop for image blocks

    It’s now possible to drag and drop images onto any Image dashboard block to automatically publish the properly formatted Base64 image data string to your feed.

    There are some important things to keep in mind when using this feature. Normal feeds are limited to 1KB of data, or about 1024 bytes, for publishing. Turning off feed history from the feed settings page allows publishing up to 100KB, or 102400 bytes, of data. Image conversion from binary to Base64 happens inside the browser, with no image pre-compression, and more importantly, conversion from binary to Base64 expands the size of the image data.

    You’ll have to do your own testing to figure out what an appropriate image size and format (png, gif, or bmp) for you are. For example, the .png image used for testing below has an on disk size of 68089 bytes, but a Base64 value of 90788 bytes, an expansion factor of about 150%, which is really close to the limit.

    sample image for upload test image

    image upload testing in block editor test publishing in block editor

    One funny artifact of the drag and drop feature is that IO doesn’t actually care if you’re using the block to publish image data. Any file that can be converted into Base64 (which is any file) can be dropped onto an image block and sent to MQTT subscribers.

    Let us know what you’re making!

    Join us in the Adafruit IO forum or on Discord in the adafruit-io channel with questions, comments, or suggestions. We love seeing what you all come up with when we add new features to Adafruit IO!

  • New Feature Launch: Feed Sharing

    New Feature Launch: Feed Sharing!

    You’ve always been able to make your feeds completely public or completely private. Private feeds are hidden from the outside world, no other user can see them and no one browsing Adafruit IO can stumble across them. Public feeds are available as a read-only data source to anyone in the world. Until now, though, there hasn’t been a way to receive data from other Adafruit IO users in your feeds and no way to share your data with just one person.

    Feed sharing introduces the ability to share a particular feed with a particular user as a read-only or read-write feed. This means you can keep a feed “private” as far as the whole world is concerned, but allow another Adafruit IO account to send data to it and read data from it.

    There are a few new features we had to add to Adafruit IO to make sharing directly with other users possible. Here’s a quick guide to sharing and how to find your way around the new parts of Adafruit IO.

    Sharing a feed

    Step 1 is to invite another account to share your feed. You can do that from any existing feed page using the new “Sharing” form.

    Sharing link in the sidebar on a full-browser feed page

    Sharing form on a full-browser feed page

    When you invite an account, the person you invite will receive a brief notification email and see the invitation on their shares page. If you share to an email address and they haven’t signed up yet, the person you shared with will have the chance to create a new Adafruit IO account.

    new user sharing invite email

    If you share with an existing Adafruit IO user via the email address on their Adafruit account or their Adafruit IO username, they’ll be able to review and approve your invitation immediately. After you’ve shared, the user you’re sharing with will get an email:

    existing user sharing invite email

    And a link to the sharing invitation review page:

    reviewing a sharing invitation from another user

    The sharing page

    This is the hub for all your sharing information. Right now you’ll see listings for feeds you are sharing with other Adafruit IO users, and feeds other Adafruit IO users are sharing with you. If you’re blocking any users from inviting you to share with you, you’ll see those accounts listed on this page too.

    sharing review page

    As we add sharing features to Adafruit IO, this will be where they show up first.

    Sharing feed writes

    Since you’re able to share feeds as read/write data streams with other registered Adafruit IO users, data rate limiting has to come into the picture. For this new feature, all data rate usage comes from the publishing user. That means when you share your feed with another user and they publish data to it, your data rate usage will remain unchanged while theirs will be affected.

    In order to support in-browser MQTT subscriptions to other users’ shared, non-public feeds, we’ve made changes to the output of our */json MQTT topics. Because these topics aren’t used in any of our libraries and aren’t highlighted in our guides, this change will have very little impact on existing MQTT subscribers. Less than 0.4% of MQTT subscriptions will be affected.

    Before, the output of a subscription to test_username/feeds/feed-a/json looked like this:

    {
      "username": "test_username",
      "owner": {
        "id": 1,
        "username": "test_username"
      },
      "id": 4,
      "name": "Feed B",
      "description": null,
      "history": true,
      "unit_type": null,
      "unit_symbol": null,
      "last_value": "-23.908",
      "visibility": "private",
      "license": null,
      "created_at": "2018-05-21T20:52:17Z",
      "updated_at": "2018-07-26T18:38:00Z",
      "status_notify": false,
      "status_timeout": 60,
      "enabled": true,
      "key": "feed-b",
      "groups": [
        {
          "id": 1,
          "key": "default",
          "name": "Default",
          "user_id": 1
        }
      ]
    }
    

    That’s the same JSON record you would get if you used the HTTP API to retrieve /api/v2/test_username/feeds/feed-b, which is helpful if you want information about the feed, but kind of unhelpful if you actually want the new feed data record that prompted the MQTT message.

    After the launch of feed sharing, the same MQTT subscription output looks like this:

    {
      "last_value": "-23.908",
      "updated_at": "2018-07-26 18:38:00 UTC",
      "key": "feed-b",
      "data": {
        "created_at": "2018-07-26T18:38:00.560Z",
        "value": "-23.908",
        "location": [
          39.4194156246497,
          -76.69504058954743,
          null
        ],
        "id": "0DY1QDB7K3VN8YDCYCAD538Z5Q"
      }
    }
    

    Because of the always-on nature of the MQTT API and the difficulty of changing topics all at once on client devices, we include the legacy last_value field in the new JSON output. If you have a client using */json MQTT topic subscriptions, you should update from json.last_value to json.data.value to access your feed’s data. After a few months of this new MQTT JSON output format, we will deprecate the last_value field and remove it from the MQTT API.

    Social web services and your safety and security

    Because Adafruit IO is an open web service, we don’t review every single feed sharing invitation before it’s sent. In order to prevent repetitive unwelcome sharing invitations from anyone, we will always give you the ability to: ignore individual invites, block a user from being able to invite you to share, or unsubscribe from all sharing invitation emails.

    When you ignore an invite, it will be cleared from your sharing page and the user who invited you won’t be able to invite you to that feed again, but they will be able to invite you to share any other feed they own.

    When you block a user, they will no longer be able to share any feeds with you at all. Users will never be explicitly informed that you have blocked them, but they may be able to infer it if they can’t share anything with you. Sharing blocks are permanent until and unless you remove them.

    Choosing to unsubscribe from sharing invitation emails will keep your inbox clean, so you’ll have to visit your sharing page to see if you have any new sharing invitations.

    Adding a social layer to Adafruit IO has always been part of our plan, but we’ll never make your shares public. If you keep every feed and do all your sharing through direct user-to-user feed sharing, your public Adafruit IO page will still exist but remain empty. We believe that your information should be private by default.

    While we do not require moderator approval for social activity on Adafruit IO, we do monitor use of the platform. If we believe a feature is being abused for any reason, we continue to reserve the right to disable the feature or limit your use of Adafruit IO. We care about building the best Internet of Things platform for makers and part of that is making sure that it continues to be a safe space for everyone who uses it.

    Guides are coming!

    We’ll be adding more information to the Adafruit IO welcome guide with most of this information and we’re always checking the Adafruit IO forums, so if you have any questions about feed sharing please stop by and ask.

    This is the first iteration of a pretty new feature for us and we’re excited to see how people use it! Join us in the forum or on Discord in the adafruit-io channel with questions, comments, or suggestions.

  • IO Updates - Python Client and Arduino Client

    Hello Adafruit IO Community,

    We have a lot to talk about this week. We’ve been focusing development on our Arduino and Python Adafruit IO client libaries in the last couple of weeks and we’re ready to share information about them.

    Adafruit IO Python Library

    PythonIOLogo

    We’ve officialy released version 2.0.0 of the Adafruit IO Python Client Library. This is a major update which not only adds a lot of under-the-hood enhancements, but also a bunch of new requested features. We’re going to support versions =>2.0.0 of this library going forwards. We’ve also switched this library over to Python 3, support for Python 2 has officially been dropped.

    Notable Features

    • API-V2 Support: Adafruit IO Python now uses the Adafruit IO REST API v2

    • Location Support: Sending Adafruit IO Feeds locational values is now possible from this library (lat/lon/ele). Usage example for this feature, location.py, added in examples/basics. (#48)

    • MQTT Security: The MQTT Client now establishes a secure connection with Adafruit IO by default. (#45)

      • You can unset this by defining a secure=false boolean in the client initialization: client = MQTTClient(username, key, secure=False)

      • Time Topic Subscriptions:** Want to get the current time, date, or year? We added support for time/seconds, time/milliseconds and time/ISO-8601 topic subscriptions. Usage example for this feature, time_topics.py added in examples/basics. (#54)

    • MQTT Error Handling: We added a few verbose error checks for when the mqtt_client.py encounters an error. This means error messages will be easier to understand, and your programs will be easier to troubleshoot as a result. (#44)

    • New Documentation: We gave the documentation previously on the readme some t.l.c and a facelift. Documentation for this project is available on ReadTheDocs.

    • Examples: New examples have been added to /examples/basics, including some usage examples for Adafruit CircuitPython with the Raspberry Pi (more on this soon!)

    Breaking Changes

    • Python 2 support has been discontinued. We are only supporting Python Version >=3.6.

    • Adafruit IO REST API v1 support has been discontinued. We are only supporting the API v2.

    • MQTT on_message method no longer requires the retain flag.

    We actively maintain, develop and improve this library with the support of the community. If you’d like to see an ehancement or feature to this libary, let us know by filing an issue on the GitHub repository for the IO Python Client.

    Adafruit IO Arduino Library

    ArduinoIOLib

    We’ve also been working on the Adafruit IO Arduino Library.

    Features and Notes

    • ESP32 Compatability: We’ve added compatabilty for the Feather HUZZAH32 (and other ESP32-based-boards) to this library.

    • New Documentation: Just like the Python library, the Arduino Library now has a dedicated documentation page on ReadTheDocs

    • Time Topic Subscriptions: Don’t have any available pins to use a RTC? Just poll the Adafruit IO Server’s time feeds instead.

      • Adafruit_IO_Arduino client library updated to support three types of time helpers: time/seconds, time/milliseconds, and time/ISO-8601.
      • Example for subscribing to all three of the feed subscriptions added to examples/adafruitio_17_time_subscribe/adafruitio_17_time_subscribe.ino

    Get in touch with us on the Adafruit IO forums or ping @adam.io or @brentru on the Adafruit Discord, #adafruit-io channel if you have any questions.

  • IO Updates - Dashboard Improvements and New Ruby Client

    Hello IO community!

    In IO news this week: a few updates to IO dashboards and a final development push to bring our Ruby IO client library up to date with version 2 of the Adafruit IO API.

    Dashboard Updates

    We’ve made two changes to line charts on IO dashboards in the last couple weeks, one that will be visible and one behind the scenes.

    First, we’ve replaced the fixed legend in all line charts with one that follows your mouse cursor while you’re hovering over the chart. We think it’s a better way to show the value and location on the timeline of the data point or points you’re focusing on, and we also happen to like the style :D. You can see the new “hover legend” on all your dashboard charts now.

    Line chart with hover legend displayed

    The second, less visible change involves memory usage on long-lived IO dashboards. We’ve known for a while that we have a problem with dashboards + line charts + browsers crashing after a few hours of live streaming data, and it stinks.

    The cause is a memory leak and we haven’t solved it 100%, but we’ve improved the situation. We’re continuing to research performance and memory usage issues with dashboards. It’s difficult to balance user friendliness, beautiful interactive web interfaces, responsive soft-real time data rendering, and long lived pages. We’re going to keep improving and we hope you’ll keep joining us on the journey.

    Ruby IO Library

    We’ve officially released version 2.0.0 of the Adafruit io-client-ruby library. This version has been a long time coming and is the first client library we’ve released supports all the major endpoints for version 2 of our HTTP API. The library now also includes support for MQTT connections.

    We’re continuing work on our other libraries–including Arduino, Python, Javascript, and Go–and we welcome community contributions. All our client libraries are open source and available freely for use in your projects.


    Get in touch with us on the Adafruit IO forums or ping @adam.io on Discord if you have any questions.

  • IO Updates - Yearly Billing and MQTT get

    Hello IO community! Over the last few weeks we’ve released some changes to Adafruit IO that should be useful to everyone using the platform.

    IO+ Yearly Billing

    We’ve added the option to pay for IO+ on an annual basis at a reduced rate of $99 per year. So instead of paying $10 each month–$120 total for a year of service–you can pay $99 once and get the same year of IO+ features.

    If you’re already an IO+ subscriber (thanks for your support!) and you want to switch, you can change to yearly billing on your profile page when you’re logged in to Adafruit IO. We’ve also added an Adafruit IO+ 1 Year Subscription Pass to the Adafruit shop, so you can buy one for yourself and gift a subscription to a friend!

    Profile page with billing cycle change highlighted

    MQTT /get and the case of the missing retain flag

    MQTT is a tremendously useful protocol for building small connected devices and is relatively simple to understand and implement (if implementing networking protocols is your thing). Unfortunately, a few features of the Adafruit IO platform make it difficult for us to support the entire MQTT 3.1+ protocol specification in our broker. I’m going to talk briefly about one particular feature: the publish retain flag.

    In the MQTT protocol, setting the retain flag on a published message asks the MQTT broker (server) to store that message. Then any new clients which connect and subscribe to that topic will immediately receive the retained message. Retain makes writing basic MQTT-only Internet of Things clients easier, without it, a client that connects and subscribes to a feed topic has to wait until a new value is published on the feed to know what state it should be in. In the case of slowly updated feeds, there could be hours between updates which means a device that disconnects and reconnects (for example, due to power cycling or sleeping) might lose the current value for a long time between updates.

    Among other factors, our scale, our mix of MQTT & HTTP APIs, the speed at which we’re taking in new data, and the fact that we’re already storing almost every message that is sent mean that a “simple” feature like retain becomes difficult to support without making MQTT service performance worse for everyone.

    Since we don’t actually store data in the broker but at a lower level and can’t support PUBLISH retain directly, we’re proposing a different solution for the retaining problem: the /get topic modifier.

    The way it works is that for any given Adafruit IO MQTT feed topic (groups coming soon), subscribe to the feed topic, then add /get to the topic and publish anything to that new topic (our Arduino library uses the null character: '\0') . IO will immediately publish, just for that client, the most recent value received on the feed.

    For example, if I have a Feather HUZZAH subscribed to a counter feed: abachman/f/counter, and I want to get the latest value when I connect, I could publish to abachman/f/counter/get and immediately receive a message on abachman/f/counter with the last value that feed received.

    The feature is live on Adafruit IO and in version 2.7.3 of the Adafruit IO Arduino library which was released today. If you’re already using the library, you can add /get support to your project in one line of code.

    // ... from the adafruitio_01_subscribe example sketch
    AdafruitIO_Feed *counter = io.feed("counter");
    
    void setup() {
    
      // 1. start IO connection
      io.connect();
    
      // 2. prepare MQTT subscription with handler function
      counter->onMessage(handleMessage);
    
      // 3. wait for successful connection
      while(io.mqttStatus() < AIO_CONNECTED) {
        delay(500);
      }
    
      // 4. send /get message, requesting last value
      counter->get(); // ask Adafruit IO to resend the last value
    
    }
    // ....
    

    You can see the get() function in action in the example sketches in the updated Adafruit IO Arduino library.

    Platform Upgrades

    Early in the afternoon of April 18, we swapped out about 60% of the servers that are running IO and deployed an upgrade one of the primary software frameworks IO is built on (Ruby on Rails). Because framework upgrades are part of the boring, behind the scenes parts of software development and maintenance, you shouldn’t notice any change to IO except that data is processed about 4% faster on average. :D

    No data in transit was lost, but there was a period of about 5 minutes of delayed MQTT data processing. A few early bugs were caught and fixed, so there may be some devices that were sending data successfully that failed for a brief time.


    Get in touch with us on the Adafruit IO forums or ping @adam.io on Discord if you have any questions.

  • State of IO 03.21.18

    Here are the stats for the past week:

    * 97.8 million inserts of logged data in the last 7 days
    * 37,663 online feeds (140,620 feeds total)
    

    We’re responding to issues you may run into on our Adafruit IO Forum. Please post any issues with as much detail as you can. It definitely helps us out when fixing the bugs.

    Also, if you’re still using version 1 of our API, you may want to upgrade to the latest version 2. It has more features, and is generally better designed and easier to use than our previous API. The default for our docs is V2 now as well.

  • IO New Features - Feedback Forms and Public Pages

    Hello everyone and happy Friday! It’s been a busy few weeks and there are a couple new features at Adafruit IO we’d like to mention.

    First off, we’ve added a new feedback form directly into Adafruit IO, so you can inform us quickly about any trouble with the site or ask any questions about the Adafruit IO+ plan without having to go through the forums. We included a few options for feedback and while we will do our best to address any issues with the site or our client libraries quickly and directly via email, we aren’t able to respond to every feedback request. If you’re having trouble with your personal code or hardware projects, the Adafruit IO forum is still the best place to go for help.

    Screenshot of feedback form in Firefox

    You can find a link to the Feedback form at the bottom of the left hand sidebar on most pages.

    Second, and something I’m personally excited about, we’re introducing public pages for every user. You can see mine here. There are a few pieces of Adafruit IO you can make visible to the public as read-only data. Right now that’s Dashboards and Feeds. With the public pages, we now have a one-stop location for listing everything you have shared so you can see what’s public and you can share the link with anyone who might be interested.

    Screenshot of public pages Firefox

    Our intention isn’t to make Adafruit IO yet-another-social-media platform, but we firmly believe that things can turn out better when we work together, so we try to make that easier when we can. Stop by the forums or our Discord chat server and talk about what you’re working on!

  • December 2017 Throttle Updates

    December 2017 Throttle Updates

    MQTT Group Publish Data Rate Correction

    Hello IO friends!

    We’ve found and corrected a problem with our data rate tracking system that was allowing MQTT group publish events to be counted as a single event for the purpose of data rate monitoring instead of tracking each feed as a separate event. This means publishing to a group with five feed values was counted as 1 data point, even though we were storing 5 data points.

    The correction updates our MQTT broker to count a group message with 5 feeds as 5 data points against your accounts total available data rate.

    Free Plan Changes in 2018

    Speaking of IO+, IO Free, and permitted data rates: starting in January 2018 we will begin lowering the current allowed IO Free data rate from 60 points-per-minute to the advertised 30 points-per-minute. For the vast majority of people using Adafruit IO Free accounts, this shouldn’t be a problem, but we’ll be making the change gradually to avoid disabling a vast swathe of devices all at once.

    Each week we’ll be dropping the data rate by 5 points-per minute until it’s down to 30. That’s plenty of useable bandwidth and storage for any of the Adafruit IO projects on the Adafruit Learning System.

    Why so many data rate changes?

    Our ultimate goal with data rate monitoring and limiting is to make sure we provide a good balance of data storage and response speed across the entire Adafruit IO platform for every user whether they have a free account or an IO+ account.

    While IO+ has a higher data rate and more data storage, every message should still move through IO from publish to IO back out to subscribers at the same speed. By our measurements that speed is around 35ms on average for a round-trip from a device to IO and back out to a device. The way we keep that speed steady and available for everyone is making sure no account is able to take an unfair amount of it.

    When we make changes like this that can feel restrictive, it’s to make sure resources are shared fairly. The good news is that over a longer amount of time, improving the efficiency of Adafruit IO means we’ll be able to give more away. So, some pain now for more good stuff in the future. If or when we can find a way to double the amount of data we can process at the same cost-per-user we’re at right now, we’re probably going double the data rate for everyone!

    Just for comparison and since I was curious about the numbers, Adafruit IO Free provides a steady 30-data-points-per-second data rate which over 30 days comes out to 1296000 messages possible: 30 messages-per-minute * 60 minutes-in-an-hour * 24 hours-in-a-day * 30 days. To use a lower-level Internet of Things service provider as an example, in this case Amazon, you can achieve a much higher data rate (up to 100 messages-per-second per-client, 9000 per-second per-account), but for the same amount of data we provide for free you’d pay about $5 a month at their $5 per million messages price (retrieved December 2017). Your dashboards would also be way less pretty, but that’s another story :D


    Stop by the Adafruit IO forum or the adafruit-io room on our Discord server if you have any questions or comments. We’d love to hear what you’re making with Adafruit IO!

  • Groups, Feeds, and Proper MQTT Topics

    Groups, Feeds, and Proper MQTT Topics

    We’re deploying a fix to a subtle bug in our MQTT subscription topics today and wanted to write a quick post describing the problem and the fix for people who might currently be using workarounds. MQTT subscription behavior is going to change slightly (for the better) in a way that may break existing systems.

    Publishing to “composite” feed keys through our HTTP or MQTT APIs has worked since we introduced that feature with API version 2–that’s anything in the form of group.feed.

    You can see an example of those keys here:

    2017-10-31

    But, due to the way our internal MQTT message routing system worked, subscribing to a composite key hasn’t worked until today. Publishing to a feed at username/feeds/group_key.feed_key only sent data to subscribers that used topics that looked like username/feeds/feed_key. From this point in time forwards, however, data published to username/feeds/group_key.feed_key will always only be sent to subscribers to username/feeds/group_key.feed_key.

    We are considering this a bug fix, but it introduces some subtle effects for people who add feeds to multiple groups. Here are the three things you need to keep in mind with Adafruit IO and MQTT. The

    MQTT Feed Subscription Data Routing

    First and most critically, MQTT subscriptions to username/feeds/feed_key for all feeds that are not in your default group will stop working. Some users found that using the bare feed key worked for MQTT subscriptions, but it’s a workaround and not something we want to continue supporting now that we have a fix for it.

    Second, subscriptions to feeds that belong to multiple groups will only produce data that is published over MQTT to that group + feed combination. However, all data sent to that feed will still be shown on that feed on the Adafruit IO feed page and any dashboard blocks that use the feed, regardless of the group or groups it belongs to. A practical example of that would be a feed belonging to two groups.

    For example, in the case of a group named “Signal” belonging to the “Garage” and “Office” groups, I would end up with something that looks like this on my feeds page:

    2017-10-31

    “Signal” is a single Feed object, but shared between two different groups. If publish to one of those feed keys:

    PUBLISH abachman/feeds/garage.signal "1"
    

    Then only MQTT subscribers to abachman/feeds/garage.signal will see the value “1” come through. If I publish to both feed keys:

    PUBLISH abachman/feeds/garage.signal "1"
    PUBLISH abachman/feeds/office.signal "2"
    PUBLISH abachman/feeds/garage.signal "3"
    PUBLISH abachman/feeds/office.signal "4"
    ...
    

    Then the abachman/feeds/garage.signal subscription will only see:

    SUBSCRIBE abachman/feeds/garage.signal
    >>> "1"
    >>> "3"
    ...
    

    Likewise, group subscriptions will only see the messages published to that feed in the context of that group. So if instead of abachman/feeds/garage.signal I subscribed to abachman/groups/garage I would see:

    SUBSCRIBE abachman/groups/garage
    >>> {"feeds":{"signal":"1"}}
    >>> {"feeds":{"signal":"3"}}
    ...
    

    Over MQTT, feed subscriptions in the context of a given group will only produce messages that were published to that group + feed.

    HTTP Feed Data Requests

    Finally, all HTTP data queries for a given feed, regardless of the group context (group.feed key), will produce all data published to that feed. In the case of the example above, that means HTTP GET requests to /api/v2/abachman/feeds/garage.signal and /api/v2/abachman/feeds/office.signal will both produce the same data.

    $ export KEY='860b36ff6537fa01e9ee755be3ae18d4fake'
    $ export API_URL='https://io.adafruit.com/api/v2'
    $ curl -H "X-AIO-Key: $KEY" $API_URL/abachman/feeds/garage.signal/data.csv?limit=4
    
    id,value,feed_id,feed_key,created_at,location,lat,lon,ele,created_epoch,expiration
    0DQAZP2V6NZ37PA1662SG30R7G,4,30,garage.signal,2017-11-01 21:43:11 UTC,,,,,1509572591,2017-12-01T21:43:11Z
    0DQAZP1ADTNFJ990QGSZ6HG9F4,3,30,garage.signal,2017-11-01 21:43:06 UTC,,,,,1509572586,2017-12-01T21:43:06Z
    0DQAZNZSJJR9ZP5NSS1R6YV56Q,2,30,garage.signal,2017-11-01 21:43:01 UTC,,,,,1509572581,2017-12-01T21:43:01Z
    0DQAZNY8VC0FS8KMA9TZWBV77Z,1,30,garage.signal,2017-11-01 21:42:56 UTC,,,,,1509572576,2017-12-01T21:42:56Z
    
    $ curl -H "X-AIO-Key: $KEY" $API_URL/abachman/feeds/office.signal/data.csv?limit=4
    
    id,value,feed_id,feed_key,created_at,location,lat,lon,ele,created_epoch,expiration
    0DQAZP2V6NZ37PA1662SG30R7G,4,30,office.signal,2017-11-01 21:43:11 UTC,,,,,1509572591,2017-12-01T21:43:11Z
    0DQAZP1ADTNFJ990QGSZ6HG9F4,3,30,office.signal,2017-11-01 21:43:06 UTC,,,,,1509572586,2017-12-01T21:43:06Z
    0DQAZNZSJJR9ZP5NSS1R6YV56Q,2,30,office.signal,2017-11-01 21:43:01 UTC,,,,,1509572581,2017-12-01T21:43:01Z
    0DQAZNY8VC0FS8KMA9TZWBV77Z,1,30,office.signal,2017-11-01 21:42:56 UTC,,,,,1509572576,2017-12-01T21:42:56Z
    

    This is because although the feed belongs to two different groups, it’s still the same underlying Feed record.

    Receiving ALL Messages

    If you need to see all data published to a specific Feed, you can use the raw feed id value. You can find the corresponding MQTT topic on the “Feed Information” form associated with the Feed you want to track.

    Alternatively, every user account has a global data feed at the MQTT topic :username/dashboard/stream/create where :username is your account username. This topic produces a data record for every new data point stored:

    SUBSCRIBE abachman/dashboard/stream/create
    >>> {
      "id": "0DQBM1EPCDA0J6Z89CE1YC26D1",
      "value": "5",
      "feed_id": 30,
      "feed_key": "garage.signal",
      "created_at": "2017-11-02T16:41:32Z",
      "location": null,
      "lat": null,
      "lon": null,
      "ele": null,
      "created_epoch": 1509640892,
      "expiration": "2017-12-02T16:41:32Z"
    }
    

    With Feeds + Groups, we’ve created a powerful tool for flexibly routing and storing messages over MQTT. A single feed can be used multiple ways by adding it to different groups, which can be helpful if you’re still using a feed-limited plan like IO Basic. IO Plus gives you an unlimited number of feeds, so reuse is less critical, but we expect the flexibility described to be useful in certain cases or else we wouldn’t have built it :D

    I’ve published a short GitHub Gist that includes code demonstrating the topic described in this post, you can find that here: https://gist.github.com/abachman/a04694748ad887d5aa7e644e3292fa81.


    Thank you for for joining us as we continue to extend and improve Adafruit IO. As always, stop by the Adafruit IO forum or our Discord server in the #adafruit-io room to share any questions or comments, especially when it comes to details of our MQTT support. We’d love to hear about what you’re building!

  • New MQTT topic for tracking connections

    NEW FEATURE: Tracking MQTT Client Connections

    New feature!

    We’ve added a new MQTT topic at :username/clients (where :username is replaced with your username) and a section on the IO Monitor page to track live MQTT client connections. We aren’t doing anything fancy with the data (yet!), so it’s “stateless” / streaming only for now.

    What you’ll see if you subscribe to the topic is a JSON object with the connection status, time of event (at), and an object containing information about the client. At this moment it’s only the client’s self-reported MQTT id. For example:

        // on connection
        {"status":"connected","at":"2017-10-24T16:08:38.552Z","client":{"id":"io-mqtt-39dc5a71"}}
    
        // on disconnectiohn
        {"status":"disconnected","at":"2017-10-24T16:08:40.691Z","client":{"id":"io-mqtt-39dc5a71"}}
    

    We use that bit of data on your IO monitor page to show when clients are connecting and disconnecting in real time.

    IO Monitor with /clients feed

    Using the /clients topic

    We’re not yet storing detailed client connection state, we’re just reporting on it live. So how is this useful? The first and easiest way to use the topic is just to track clients as they connect and disconnect and catch funny business before you get throttled. The feed only shows authenticated client connections, so you won’t see failed attempts, but you will be able to track any hardware, software, or browser sessions as they connect and disconnect.

    Since the only piece of identifying information that’s sent along with connection updates is the id, we can use that to record which specific clients is doing the [dis]connecting. Most MQTT clients generate a random identifier if one is not specified. So, by setting a custom client ID, we can pass some information through the system to see which device is acting up.

    For example, on my home environmental monitor, which is running on an Arduino MKR1000, I can use the Adafruit MQTT Library to manually specify the MQTT client ID I use. Using the Adafruit_MQTT_Client constructor that takes a clientid argument, my code looks like this:

    Adafruit MQTT Client with custom clientid

    Which shows up on my monitor page with the custom clientid value!

    IO monitor with custom clientid

    Choosing a client ID value

    Now, not just any client ID will do, there are a few guidelines:

    1. Stick with printable bytes, anything else won’t be helpful for tracking.
    2. Only the first 32 bytes of your clientid will be displayed, so keep the IDs at or under 32 bytes in length. The MQTT v3.1 spec requires that we allow at least 23, but lets us handle more. Internally IO can use more than 32 bytes to track clients, but only the first 32 will be published on the /clients topic.
    3. Make sure it’s unique! Only one client with the given ID can be present on the network at a time. A good pattern for creating a client ID might be: your username + a device name + something random. Then you’ll know whether it’s the lamp controller or the weather station that keeps dropping its connection.

    This is just a step towards a more complete device tracking / monitoring system, but gives a lot more insight into what’s happening on your IO account. Let us know how you’re using IO or IO+ on the forums or in our Discord chat room

  • LIVE NOW - IO Plus! The Adafruit IO Subscription Plan

  • State of IO 10.13.17

    Here are the stats for the past week:

    * 82.1 million inserts of logged data in the last 7 days
    * 30,816 online feeds (105,563 feeds total)
    

    We’re responding to issues you may run into on our Adafruit IO Forum. Please post any issues with as much detail as you can. It definitely helps us out when fixing the bugs.

    Also, if you’re still using version 1 of our API, you may want to upgrade to the latest version 2. It has more features, and is generally better designed and easier to use than our previous API. The default for our docs is V2 now as well.

  • COMING SOON - IO Plus! The Adafruit IO Subscription Plan

    IO Plus, The Adafruit IO Subscription Plan

    COMING SOON After a long time in beta testing mode, IO is getting a subscription plan, IO Plus! It’s been in our minds since we started this project a few years ago and “How can I get more feeds?” has been the most frequent and persistent question from people using and interested in IO, which is GREAT! The good news is that we finally have an answer for you. Say hello to IO+!

    Say hello to IO+

    Here is what’s coming (we have not decided on a date yet!):

    1. For a flat $10 per month, you can subscribe to IO+ and get unlimited feeds, unlimited dashboards, and two months of data storage.
    2. We will always continue to provide a free plan, but for new subscribers, the free plan will be limited to 5 feeds and everyone on the free plan will be limited to 30 new data points per minute.
    3. As a thank you to everyone who’s been with us this far, we’re giving away three months of IO+ free when you subscribe1. You won’t pay anything unless you keep your subscription after the third month. Additionally, if you have more than 5 feeds when we move to the new account limits, you can keep the extras2.
    4. No more “Beta” ;)

    It’s always been our goal with Adafruit IO to make the best designed Internet of Things platform for makers of all ages and skill levels. We want it to work well with the connected devices and kits we sell and we built it with an open API to make sure it can work with any device that can speak HTTP or MQTT. Additionally, as a business, we need a way to make the service self-sustaining financially, without making it inaccessible to the makers we are trying to serve.

    IO+ will provide more functionality at a single flat rate to the people who need it while our continuing free plan will let anyone build a project on IO, whether it’s their first time working with the Internet of Things or their hundredth.

    We will keep standing up for everything we’ve said before in our Internet of Things Bill of Rights, whether you’re using IO+ or IO Free. Our platform is built on open technologies and you control your clients and devices. You own your data and you will always be able to decide what is public and what is private. We want to keep building a system that is easier to use for good and harder to use maliciously. We hope you’ll join us!

    So that’s the big news, IO+ is coming in the beginning of October. If all goes as planned, it will be available Monday, October 2. Please stop by the IO Forum or our Discord chat server to ask questions or communicate with us. We’d love to hear from you.

    Other changes

    We’ll also be launching some changes to the IO interface to clean up navigation and make sure you know what’s up with your plan. Since those changes will go live with the IO+ launch, here are some screenshots to give you a preview:

    New landing page

    An updated landing page. Way more information and an attractive new design.

    New site navigation

    We’ve cleaned up the site navigation and made it easier to tell when you’re looking at Adafruit IO and not www.adafruit.com.

    New feeds page

    All Feeds and Groups are now on a single page. This should make it easier to see how Groups and Feeds are related, and also easier to manage them.

    New user profile page

    A new account profile page. This one is going to see more work in the coming months, but for now it’s the one-stop screen to see which plan you’re running and to get access to your account settings.

    Updated account data download

    The account download feature has been rebuilt to be more robust and reliable. (this feature has already launched)

    There will, of course, be design tweaks as we get closer to launch and we’re always working on the site, so small things will continue to get better.

    That’s all … for now!

    We’re still hard at work on IO and there’s lots more to come. If you’re already using Adafruit IO, thank you for continuing on this journey with us, and if you haven’t yet signed up, now is a great time :D


    1: The “IO Beta Thank You” coupon is for any user who has had an account since before September 1, 2017 and will be applied automatically at checkout.

    2: If you keep your free account after IO+ launches, we’re not going to delete your feeds, but you won’t be able to create new feeds if you already have more than 5, the IO Free plan limit. If you choose to subscribe to IO+ and then cancel, however, your feeds will be dropped back down to 5 after your subscription ends but you will have plenty of time to download all your data before that happens.

    We’ll continue to clarify details as we get closer to launching and if you have any questions please stop by the forums and get in touch.

    Just remember this is coming soon, we have not set a date yet 🙂

  • State of IO 08.10.17

    Here are the stats for the past week:

    * 81.4 million inserts of logged data in the last 7 days
    * 31,742 users
    * 27,295 online feeds (94,065 feeds total)
    

    We’re responding to issues you may run into on our Adafruit IO Forum. Please post any issues with as much detail as you can. It definitely helps us out when fixing the bugs.

    Also, if you’re still using version 1 of our API, you may want to upgrade to the latest version 2. It has more features, and is generally better designed and easier to use than our previous API. The default for our docs is V2 now as well.

  • State of IO 07.19.17

    Here are the stats for the past week:

    * 78.9 million inserts of logged data in the last 7 days
    * 30,780 users
    * 26300 online feeds (90,680 feeds total)
    

    Since the last state of io post we’ve updated our Adafruit IO Arduino client library. We’ve added a few new features to dashboards, such as customizing buttons with colors, unified throttling with our new throttle, and many fixes behind the scenes as well as issues reported on our forums (thanks!).

    We’re also responding to issues you may run into on our Adafruit IO Forum. Please post any issues with as much detail as you can. It definitely helps us out when fixing the bugs.

    Also, if you’re still using version 1 of our API, you may want to upgrade to the latest version 2. It has more features, and is generally better designed and easier to use than our previous API. The default for our docs is V2 now as well.

  • Important Client Library Update

    Note: The library has now been updated to 2.6.0 with this required change.

    There is an important update to the Adafruit IO Arduino client library that will be released tomorrow. We will perform this update as a coordinated update with the SSL certificates for io.adafruit.com. The client library contains an SSL fingerprint that checks the validity of the connection.

    You will need to download the library update, and then compile/upload to your devices once the update is released tomorrow. We will update this post once the update has been pushed.

  • State of IO 07.07.17

    Here are the stats for the past week:

    * 76.4 million inserts of logged data in the last 7 days
    * 30,188 users
    * 25607 online feeds (88,417 feeds total)
    

    The biggest new feature is a new download system for your data. It’s a more robust way to download your data and doesn’t make you wait for it to complete, along with a few other neat features. If you want to try it out, visit your feed or settings page to download your data.

    We’ve also updated our throttling algorithm. Please see this post for more details.

    Another update that we can talk about is that we are that we’re currently working on our Ruby and Python client libraries. Porting them to the api v2, and adding new features. If you want to play with alpha/beta code, feel free to check those out in their respective repository and api-v2 branches.

    We’re continuing to work on a few major new features, but we aren’t quite ready to talk about them yet.

    We’re also responding to issues you may run into on our Adafruit IO Forum. Please post any issues with as much detail as you can. It definitely helps us out when fixing the bugs.

    Also, if you’re still using version 1 of our API, you may want to upgrade to the latest version 2. It has more features, and is generally better designed and easier to use than our previous API. The default for our docs is V2 now as well.

  • Changes to Throttling in Adafruit IO

    We’re changing throttling in Adafruit IO for the better. We’re moving from a fixed-window, long period throttle rate that can lock out clients for up to 15 minutes in some cases to a rolling-window, short period throttle rate that can reset sooner when clients are well behaved.

    In the past, hitting our authentication or data limits could result in a lock on your account for up to 15 minutes. If you’ve ever seen the red bar at the top of your browser window while you’re working on an IoT project, that was most likely a throttle. The short explanation for that is that we were using a fixed-window throttling algorithm that resulted in message bursting when we made the window of time too small. The best solution we had at the time was to make the window longer, which resulted in the 15 minute lock-outs mentioned above.

    With our new system, very similar to the one described here, once you’re throttled on authentication or sending data, stopping sending will be guaranteed to reset your throttle in less than 1 minute. The tradeoff is that continuing to send messages at a greater-than-limit rate will cause you to remain throttled forever. Where the old system would let you back in for authentication after 15 minutes, the new system could lock you out forever if you have a large enough collection of misbehaving devices you’re unable to stop.

    To avoid being throttled, make sure you set delays on all reconnection attempts of at least 10 seconds and make sure you’re sending at most 1 message per second across all your devices and browser sessions. For example, our Arduino library delays for 60,000 milliseconds between reconnection attempts after it’s been throttled. Client libraries will let you post data as fast as you’d like, so it’s a good idea to keep a subscription to the MQTT $username/throttle topic open somewhere you can see it while you’re writing code.

    Some additional benefits of the new system going forward:

    • We can now manage throttling across the MQTT and HTTP APIs.
    • We now have a few additional variables we can tweak to make the experience of building an IoT device or application nicer. For example, we can set minimum distances between messages and scale the rate/window to smaller slices (10 messages / 10 seconds rather than 60 / 60). We’ll be keeping an eye on throttling once we’ve deployed the new system.
    • Refactoring our throttle logic lets us customize throttle rates across accounts, which will support Adafruit IO paid subscriptions in the future.

    It’s tricky to be brief, but we put a lot of thought into changes like this and we like to share. :D

    Please speak up on the forums with any questions or thoughts. We’d love to hear how you’re using IO!

  • State of IO 06.15.17

    Here are the stats for the past week:

    * 84.7 million inserts of logged data in the last 7 days
    * 29,181 users
    * 24,509 online feeds (84,764 feeds total)
    

    Since our last State of IO post, we’ve been mostly heads down on new features that aren’t quite ready yet for production. We’ve also made some major performance improvements to our backend that has helped with general system stability.

    We’re also responding to issues you may run into on our Adafruit IO Forum. Please post any issues with as much detail as you can. It definitely helps us out when fixing the bugs.

    Also, if you’re still using version 1 of our API, you may want to upgrade to the latest version 2. It has more features, and is generally better designed and easier to use than our previous API. The default for our docs is V2 now as well.

  • State of IO 05.16.17

    Here are the stats for the past week:

    * 80.2 million inserts of logged data in the last 7 days
    * 27,729 users
    * 23,248 online feeds (79,685 feeds total)
    
  • State of IO 04.25.17

    Here are the stats for the past week:

    * 81.4 million inserts of logged data in the last 7 days
    * 26,662 users
    * 22,161 online feeds (75,819 feeds total)
    * ~132 inserts per second via MQTT
    * ~10 inserts per second via REST API
    
  • State of IO 04.05.17

    Here are the stats for the past week:

    * 75.8 million inserts of logged data in the last 7 days
    * 25,738 users
    * 21,038 online feeds (72,237 feeds total)
    * ~120 inserts per second via MQTT
    * ~10 inserts per second via REST API
    
  • State of IO 03.22.17

    Here are the stats for the past week:

    * 60.7 million inserts of logged data in the last 7 days
    * 24,942 users
    * 19,888 online feeds (68,525 feeds total)
    * ~95 inserts per second via MQTT
    * ~12 inserts per second via REST API
    

    This past week we’ve been focusing on mostly behind the scenes functionality as we prepare to migrate data to a new backend. Most of our focus right now is on maintaining a high uptime. New features are in the works as well.

    We’re also responding to issues you may run into on our Adafruit IO Forum. Please post any issues with as much detail as you can. It definitely helps us out when fixing the bugs.

    Also, if you’re still using version 1 of our API, you may want to upgrade to the latest version 2. It has more features, and is generally better designed and easier to use than our previous API. The default for our docs is V2 now as well.

  • State of IO 02.21.17

    Here are the stats for the past week:

    * 63.5 million inserts of logged data in the last 7 days
    * 23,365 users
    * 18,096 online feeds (63,209 feeds total)
    * ~100 inserts per second via MQTT
    * ~15 inserts per second via REST API
    

    This past week we’ve increased the size of at least one server, and made a fairly major database migration that is the first step towards long-term stability and speed. We have more changes in the pipeline, and will make announcements here and on the forums when they are ready to go.

    We’re also responding to issues you may run into on our Adafruit IO Forum. Please post any issues with as much detail as you can. It definitely helps us out when fixing the bugs.

    Also, if you’re still using version 1 of our API, you may want to upgrade to the latest version 2. It has more features, and is generally better designed and easier to use than our previous API. The default for our docs is V2 now as well.

  • User Submitted Tutorial - Guide for using Adafruit IO with Raspberry Pi and IFTTT

    A user on a reddit post has put together a great guide on general connectivity with IO from a Raspberry Pi and IFTTT. They cover the end-to-end setup from signing up for IO, IFTTT and example sketches.

    I’ll describe the basic steps for sending data from the RPi to Adafruit.io and then getting IFTTT to take an action based on it, but you can go in the other direction too: have IFTTT post information to Adafruit.io then have the RPi take some action based on that.

    We also have a guide that explains how to setup a door sensor that triggers through IFTTT as well.

    If you would like your Adafruit IO tutorial to be featured, share it with us via Twitter (@adafruit) or Instagram (@adafruit) by using the hashtag #adafruitio.

  • State of IO 01.18.17

    Here are the stats for the past week:

    * 70.2 million inserts of logged data in the last 7 days
    * 21,682 users
    * 16,420 online feeds (57,551 feeds total)
    * ~110 inserts per second via MQTT
    * ~12 inserts per second via REST API
    
  • Adafruit IO User Interface Update

    We’ve deployed an all-new Adafruit IO user interface that should be faster, more responsive and streamlined than our previous UI. Beyond being faster and generally nicer to look at, another benefit of this change is it’s going to allow us to develop new features and fix existing bugs much more quickly than before. The high level changelog of the new features is below.

    This should only impact the front-end browser UI. There should be no impact to your device connectivity or API/MQTT calls.

    The UI is now directly using our API V2. It’s recommended that you also utilize the API V2 going forward. We’re working on updating our documentation and tutorials to indicate this as well. Also, if you’re using one of the many compatible devices, we highly recommend using our new client library that significantly simplifies and wraps the boilerplate needed to get a project going: https://github.com/adafruit/Adafruit_IO_Arduino

    IO Changelog (high level):

    • Updated design across the site
    • Faster, more responsive and streamlined than before
    • New charting features
    • New Dashboard layout engine
    • More granular permissions (in API V2) for your data
    • New Activity page which should be more useful than before
    • New functional sidebar in feeds page
    • New dashboard block creation experience
    • Bug fixes and performance optimizations
  • State of IO 01.10.17

    Here are the stats for the past week:

    * 70.0 million inserts of logged data in the last 7 days
    * 21,259 users
    * 16,063 online feeds (56,401 feeds total)
    * ~110 inserts per second via MQTT
    * ~12 inserts per second via REST API
    
  • State of IO 12.14.16

    Here are the stats for the past week:

    * 65.3 million inserts of logged data in the last 7 days
    * 19,940 users
    * 15,004 online feeds (52,527 feeds total)
    * ~100 inserts per second via MQTT
    * ~12 inserts per second via REST API
    
  • Quick Tip: Adding a Power Switch to your Feather

    Here’s a quick tip from @ladyada that will show you how you can use the EN (enable) pin to control the power on your Adafruit Feather with a SPDT slide switch.

    Power Switch

    Here is how to connect the switch to your Feather:

    • Feather GND -> Center pin on the switch
    • Feather EN -> One of the outer pins on the switch

    You can now turn your Feather off by flipping the switch to the side that is connected to the EN pin.

    For more info about the EN (enable) pin, check out this guide.

  • User Submitted Tutorial - Magnetic Door Spy

  • State of IO 12.06.16

    Here are the stats for the past week:

    * 63.6 million inserts of logged data in the last 7 days
    * 19,537 users
    * 14,583 online feeds (51,303 feeds total)
    * ~100 inserts per second via MQTT
    * ~10 inserts per second via REST API
    
  • Loading Data from Adafruit IO into Pandas

    Pandas

    If you are logging sensor data to Adafruit IO, you may have a need to do a deeper examination of your data. One popular option is the pandas data analysis library for Python.

    Here is a description from the pandas website:

    pandas is an open source, BSD-licensed library providing high-performance, easy-to-use data structures and data analysis tools for the Python programming language.

    Let’s take a quick look at how to load data into pandas from a public Adafruit IO feed.

    Setup

    You will need Python 3.5 installed, and you will also need to install pip if it wasn’t included with your Python install.

    Once Python and pip are installed, you can install pandas by running:

    $ pip install pandas
    

    For this example, we will be pointing pandas at a public Adafruit IO feed. If your feed is currently private, you will need to make it public.

    Public Feed

    Importing Feed Data

    To get started, you will need to open up a new Python file in your favorite editor, and start by importing pandas:

    import pandas as pd
    

    Next, we need to pull in feed data via the read_json method. Replace USERNAME and FEED_KEY with your Adafruit IO username, and the key of the feed you wish to load.

    feed_data = pd.read_json('https://io.adafruit.com/api/v2/USERNAME/feeds/FEED_KEY/data')
    

    If you are not sure where to find your feed’s key, you can find it below the feed name.

    Feed Key

    Date Conversion

    Next, we will convert the created_at column from a string to datetime, and set it as the index for the data frame:

    feed_data['created_at'] =  pd.to_datetime(feed_data['created_at'], infer_datetime_format=True)
    feed_data = feed_data.set_index('created_at')
    

    Plot Values on a Chart

    Now that the data has a valid date column, we can load the feed values into a time series, and plot the values:

    values = pd.Series(feed_data['value'])
    values.plot()
    

    Pandas Line

    Another simple example is to resample the data into daily averages, and plot them on a bar chart:

    daily = values.resample('1d').mean()
    daily.plot(kind='barh')
    

    Pandas Bar

    You can do a wide range of useful operations with Time Series, and you should refer to the documentation for more details.

  • State of IO 11.23.16

    Here are the stats for the past week:

    * 56.1 million inserts of logged data in the last 7 days
    * 18,941 users
    * 14,043 online feeds (49,321 feeds total)
    * ~90 inserts per second via MQTT
    * ~10 inserts per second via REST API
    
  • State of IO 11.07.16

    Here are the stats for the past week:

    * 54.7 million inserts of logged data in the last 7 days
    * 18,147 users
    * 13,309 online feeds (46,968 feeds total)
    * ~77 inserts per second via MQTT
    * ~10 inserts per second via REST API
    
  • State of IO 10.05.16

    Here are the stats for the past week:

    * 48.2 million inserts of logged data in the last 7 days
    * 16,798 users
    * 12,383 online feeds (42,857 feeds total)
    * ~75 inserts per second via MQTT
    * ~10 inserts per second via REST API
    
  • SSH Config Includes

    OpenSSH version 7.3 introduced a very handy Include feature, which is great for people who have to manage connection info for multiple servers. This makes it easy for us to generate updated SSH configs via AWS CLI for the multiple EC2 instances that serve Adafruit IO.

    Here is how you can use Include to pull in separate SSH config files from your main ~/.ssh/config. First, you will need to install OpenSSH version 7.3 or higher. If you are using Linux, you will need to install version 7.3+ via your package manager (yum,apt-get, etc), or build it from source.

    On OS X, you can do this via homebrew:

    $ brew install homebrew/dupes/openssh
    

    Confirm that you are now running 7.3 or higher by running ssh -V:

    $ ssh -V
    OpenSSH_7.3p1, OpenSSL 1.0.2j  26 Sep 2016
    

    Now you can create a new child config file in ~/.ssh using a text editor. For example, we can create an example child config at ~/.ssh/pi_config and add configuration info just as we would in the main SSH config file:

    Host pi-1
      HostName 10.0.0.10
      User pi
      IdentityFile ~/.ssh/pi_cluster
    
    Host pi-2
      HostName 10.0.0.11
      User pi
      IdentityFile ~/.ssh/pi_cluster
    
    Host pi-3
      HostName 10.0.0.12
      User pi
      IdentityFile ~/.ssh/pi_cluster
    

    From your main ~/.ssh/config, add the following line at the top:

    Include ~/.ssh/pi_config
    

    You should now be able to connect to your servers as you normally would:

    $ ssh pi-1
    

    That’s it! Check out this OpenSSH feature request if you would like more info.

  • State of IO 09.20.16

    Here are the stats for the past week:

    * 45.3 million inserts of logged data in the last 7 days
    * 16,227 users
    * 11,985 online feeds (41,024 feeds total)
    * ~75 inserts per second via MQTT
    * ~10 inserts per second via REST API
    
  • Exporting Data from Adafruit IO

    Here’s a quick tip to help you export one of your Adafruit IO feeds as CSV, Excel, JSON, or XML. First, you will need to navigate to io.adafruit.com/feeds. Once your feed list has loaded, select the feed you wish to export:

    Feed Select

    Then, click the download button below the chart:

    Download Feed

    A modal will pop up and allow you to download your feed as CSV, Excel, JSON, or XML:

    Feed Format

    If you would like to download all a copy of all of your Adafruit IO data, you can do this by navigating to io.adafruit.com/settings, and clicking the Download All Data button. This button will currently only allow you to download your data in JSON format.

    Download All

    Was this tip helpful? Please visit our IO forum to ask questions or share your thoughts.

  • State of IO 09.06.16

    Here are the stats for the past week:

    * 44.40 million inserts of logged data in the last 7 days
    * 15,671 users
    * 11,503 online feeds (39,364 feeds total)
    * ~70 inserts per second via MQTT
    * ~10 inserts per second via REST API
    
  • Hardware Testing with Jenkins & TAP

    Jenkins CI

    At Adafruit, when we push or merge changes to one of our hundreds of Arduino libraries on GitHub, we have to ask ourselves “Does this change work?”. In a lot of cases, the best answer we can give, even after extensive manual testing, is “Maybe?”. For Adafruit IO, it is important that we are able to easily answer “Yes.” to that question. A large portion of Adafruit IO users could be impacted by a bug in a library such as the Adafruit IO Arduino Library, and we want to make sure our client code is reliable.

    The hard truth is that there aren’t enough hours in the day to test each change to every library on all of the supported platforms, so most of the time we have to settle with testing one or two platforms manually, and hoping for the best on the rest of the supported platforms.

    What do we mean by platform? In this case, we are talking about the multiple microcontrollers that are supported in the Arduino IDE via the Arduino 1.6.x Third Party Hardware Specification. Arduino Uno, ESP8266, Feather M0 (ATSAMD21), and the Feather WICED (STM32F205) are all good examples different platforms that require separate testing.

    First Attempt: Build Verification using Travis CI

    We had previously attempted automated build checking using Travis CI, and that method works great for checking if sketches build on multiple platforms.

    Travis CI

    As you may have guessed, this leaves us with a huge blind spot. A passing build does not mean the code will do what you expect it to do.

    Second Attempt: Manual Compatibility Testing

    Our next attempt involved building a ‘compatibility matrix’ web app that allowed for easy logging of the results of manual tests on supported platforms. The app pushes test results to a GitHub repo as JSON (in case we need to access it programatically). It also automatically adds/updates a compatibility table in the README of the target library.

    Compatibility Matrix

    Here’s an example of the README output:

    Compatibility README Example

    This method is very effective for answering “Does this change work?”, but it is very impractical to manually test the daily changes to libraries on every supported platform.

    Latest Attempt: Running Tests on Hardware

    Our latest approach to this problem uses Jenkins CI running on an AWS EC2 instance, and small fleet of local Raspberry Pi test nodes. Each node uploads and runs unit & integration tests on hardware attached to USB ports.

    Hardware

    Each Raspberry Pi can support multiple platforms, and each platform can be targeted by the test. The tests themselves output results using the TAP protocol over a serial connection, and the Raspberry Pi sends the results back to Jenkins so we are aware when builds fail.

    Here’s a visual overview of how it works:

    Jenkins Workflow

    Test status can be monitored in real time from anywhere, and we are able to view the raw console output from the test nodes when needed.

    Jenkins Stage View

    TAP results are also parsed and attached to each build:

    Jenkins TAP View

    We will be sharing the details of this in a tutorial soon, but if you would like to take a look at our early experiments with Jenkins, head to jenkins.adafruit.com or check out our Jenkins Pipeline Library on GitHub.

  • State of IO 08.23.16

    Here are the stats for the past week:

    * 37.3 million inserts of logged data in the last 7 days
    * 15,121 users
    * 11,080 online feeds (37,600 feeds total)
    
  • Adafruit IO Arduino v2.0 Beta Release

    We have been working hard on a new version of the Adafruit IO Arduino Library. We are releasing it in ‘beta’ form today for existing IO users to try, and we will be adding new tutorials and updating existing tutorials with usage examples very soon.

    Device Independence

    v2.0.0 of the library provides a simple device independent interface for interacting with Adafruit IO. This allows you to switch beween WiFi (ESP8266, M0 WINC1500, & WICED), Cellular (32u4 FONA), and Ethernet (Ethernet FeatherWing) with only a two line change in your sketch. No changes are required to the sketch to switch between any of the supported Feather WiFi boards.

    The included examples focus on specific concepts without extra boilerplate related to setting up the specific WiFi, cell, or ethernet hardware being used. This will allow you to prototype your sketch on WiFi hardware, and easily move to cellular or ethernet with a very small change to your config file.

    Location

    The library makes it simple to publish GPS location info with your data. For example, if you wanted to publish your location with your current speed, you would send it like this:

    car->save(speed, lat, lon, ele);
    

    You could then use the map block on io.adafruit.com to display your location info. The included adafruitio_04_location example demonstrates how to send and receive location info.

    Type Conversion

    The library adds type conversion helpers for both publishing and receiving data. You can publish any data type to the save(value) method of your feed, and you can use helpers like toInt(), toBool(), & toFloat() to easily convert received messages to the appropriate data type. The included adafruitio_05_type_conversion example demonstrates converting to and from all available types.

    Updating to v2.0.0

    IO Library

    The README for the library has more info about required dependencies, and you should check there to make sure you have all of the requirements for the hardware you are using. Make sure you install v2.0.0 or higher of the Adafruit IO Arduino Library, and v0.16.0 of the Adafruit MQTT Library using the Arduino IDE’s Library Manager.

    MQTT Library

  • State of IO 08.10.16

    Here are the stats for the past week:

    * 37.6 million inserts of logged data in the last 7 days
    * 14,701 users
    * 10,713 online feeds (36,320 feeds total)
    * ~60 inserts per second via MQTT
    * ~10 inserts per second via REST API
    
  • State of IO 07.19.16

    Here are the stats for the past week:

    * 37.3 million inserts of logged data in the last 7 days
    * 13,840 users
    * 10,138 online feeds (33,776 feeds total)
    * ~60 inserts per second via MQTT
    * ~10 inserts per second via REST API
    

    To help with the increased load, we have added an additional sidekiq server to help process jobs, and it has helped with ensuring that messages from users are processed as soon as they arrive. The image below shows how adding the new server has helped smooth out job processing over the last day.

    MQTT Graph

    This week Adafruit IO passed the 10,000 online feeds milestone!

    10k Online Feeds

    We have some exciting new things coming soon, and we are always looking for feedback about Adafruit IO. Please post any questions, feature requests, or show off your project in the Adafruit IO forum.

  • Naming Feeds

    There’s an old joke that in computer science, there are only two hard problems: cache invalidation, naming things, and off-by-one errors.

    It’s taken us a bit of time to get a handle on how we give things inside Adafruit IO names, but we’re making progress. Today we deployed an update to the way Feeds are identified within Adafruit IO that may have short-term negative effects, but should, in the long run, make the whole MQTT / HTTP API easier to understand, anticipate, and use.

    I’d like to talk briefly about how we identify Feeds in Adafruit IO and how the rules we’ve set up will effect your code. You can also find this guide at https://learn.adafruit.com/naming-things-in-adafruit-io.

    The Two Feed Identifiers

    Feeds have two properties that we regularly interact with when we’re talking to the Adafruit IO API: Name and Key.

    Name

    The Name is the user provided name for this Feed. It should be a “human readable” descriptive term that helps you find your Feed in the web-based user interface and keep track of which code is talking to what feed.

    The rules for Feed names are:

    • A Feed Name MUST include at least one ASCII letter.
    • A Name MAY include any upper or lower case ASCII letters, numbers, spaces, dashes, or underscores (“ “, “-“, or “_”, respectively).
    • A new Feed Name MAY NOT be the same as an existing Feed’s Key if the Feeds are in the same group. By default, all newly created Feeds are part of the Group whose name matches your username.
    • Names are case-sensitive. This means “Blender” and “BLENDER” are treated as two different Names.

    Names are helpful because they let us associate a human friendly word with our data. We see names when we browse io.adafruit.com on the web and when we get Feed records from the HTTP API. We use names when subscribing or publishing to a Feed with the MQTT API.

    Some examples of valid, possibly useful names are:

    • Temperature
    • door one
    • 99 Red Balloons
    • books_I_would_like_to_read_before_2022

    Key

    The Key is a system-generated, URL-safe identifier based on the given Feed Name that can be used in API requests to refer to a particular Feed. Keys are generated based on the Name given when the Feed is created and follows strict rules. The rules for Feed keys are simple:

    • A Feed Key MAY ONLY contain lower case ASCII letters, numbers, and the dash character (“-“).
    • Two Feeds in the same Group may not have the same Key.

    These rules in combination with the default Group all Feeds are added to means means a new Feed cannot be created if it will use a duplicate Key and a Feed’s Name cannot be modified if the new Name will produce a Key that conflicts with another Feed in any of the Feed’s Groups.

    The rules Adafruit IO uses to generate Keys from Names are roughly:

    1. Remove formatting. This step requires a lot of discrete operations, but boils down to transliterating Unicode to ASCII and replacing any non-URL safe characters with “-“.
    2. Collapse whitespace and replace with “-“.
    3. Collapse all instances of “-“ into a single “-“ and remove them from the beginning and end of the string.
    4. Make the whole thing lowercase.

    It’s also important to note that when you change a Feed’s Name the Key will also update. We keep Keys in sync with Names whenever a Feed is updated.

    Keys are handy because they let us use a human friendly URL when communicating with the AIO API. For example, https://io.adafruit.com/abachman/feeds/beta-test and abachman/f/beta-test are nicer and easier to remember than https://io.adafruit.com/abachman/feeds/588995 or abachman/f/588995.

    Aside: Naming things in MQTT

    MQTT has its own rules for naming things and in MQTT the things we’re concerned with are called “topics”. If you read Todd’s recent post on MQTT in Adafruit IO, you know we are like an MQTT broker, but we’ve got some extra guidelines. Anyhow, here are the official rules: (you don’t need to memorize these, we handle it for you. They’re just included here for illustration)

    • All Topic Names and Topic Filters MUST be at least one character long
    • Topic Names and Topic Filters are case sensitive
    • Topic Names and Topic Filters can include the space character
    • A leading or trailing ‘/’ creates a distinct Topic Name or Topic Filter
    • A Topic Name or Topic Filter consisting only of the ‘/’ character is valid
    • Topic Names and Topic Filters MUST NOT include the null character (Unicode U+0000)
    • Topic Names and Topic Filters are UTF-8 encoded strings, they MUST NOT encode to more than 65535 bytes

    Retrieved from the MQTT Version 3.1.1 OASIS Standard, July 8, 2016.

    The full MQTT topic used to describe a Feed in Adafruit IO is in the form: username/feeds/identifier where username should be replaced with the username of the account that owns the Feed and identifier should be replaced with the Name or Key that uniquely identifies the Feed you’re talking about.

    So, MQTT considers the whole topic test_username/feeds/identifier when validating names but for the purposes of describing Feeds, we’re only considering the identifier portion.

    Naming and Accessing Feeds From the io.adafruit.com MQTT API

    Naming a Feed on the fly and then referring to it reliably can be tricky. Here are the rules we’re using right now to generate new Feeds and provide continuing access to them from the MQTT interface. For the purposes of demonstration, we’ll be using the example code provided here, but any MQTT publisher or subscriber code should work the same.

    1. Listening

    Start an MQTT subscription to topic in the form username/f/identifier, for the purpose of the following examples I’ll be using, test_username/f/Test Mode. A Feed with the name “Test Mode” doesn’t exist yet, but that’s okay with the MQTT API. The subscription will remain active and start receiving whenever you start publishing to a Feed whose Name or Key matches the given identifier value exactly.

    NOTE: no new Feeds are created in this step.

    $ AIO_FEED_NAME='Test Mode' ruby adafruit-errors-sub.rb
    CONNECT TO mqtts://test_username:12345@io.adafruit.com
    SUB test_username/f/Test Mode
    

    We’ll also start an MQTT subscriber listening to test_username/errors. This will let us see when there are problems with publishing or subscribing to Feeds.

    $ ruby adafruit-errors-sub.rb
    CONNECT TO mqtts://test_username:12345@io.adafruit.com
    

    2. Initial MQTT publish / creating a new Feed

    To create the Feed in Adafruit IO and to start populating it with data, we’ll need to publish and MQTT message to the appropriate topic. In this case, we’re subscribing to a Feed named “Test Mode”, so we’ll need to publish on a Feed with the same name.

    Using the example script provided, we’ll publish a simple MQTT message with the topic test_username/f/Test Mode:

    $ AIO_FEED_NAME='Test Mode' ruby adafruit-pub.rb
    CONNECT TO mqtts://test_username:12345@io.adafruit.com
    PUBLISHING TO test_username/f/Test Mode
    PUB 2609815 to test_username/f/Test Mode at 2016-07-11 12:53:23 -0400
    

    If this is your first time publishing to the Feed, the subscriber that’s listing to test_username/f/Test Mode should receive its first message:

    [test_username/f/Test Mode 2016-07-11 12:53:23 -0400] 2609815
    

    This first is a Feed created message and the second is the actual data received message.

    3. Tweaking Names: Publish to a Feed by name with capitalization changed

    Once the Feed has been established, publishing to any named Feed whose Key is the same as an existing Feed will add Data to the existing Feeds stream.

    PUB 3124870 to test_username/f/test mode at 2016-07-11 12:39:34 -0400
    

    And the original Feed subscriber, which is still watching test_username/f/Test Mode, receives:

    [test_username/f/Test Mode 2016-07-11 12:39:34 -0400] 3124870
    

    4. Tweaking Names: Publish to a Feed by key

    Once the Feed has been established, publishing to an existing Feed’s Key will add Data to the existing Feeds stream.

    PUB 1181702 to test_username/f/test-mode at 2016-07-11 12:42:28 -0400
    

    The Feed subscriber, still watching test_username/f/Test Mode, receives:

    [test_username/f/Test Mode 2016-07-11 12:42:28 -0400] 1181702
    

    5. Valid name variations for publishing

    When publishing, the method Adafruit IO uses internally to convert a given topic in the form username/feeds/identifier to a specific, existing Feed works like this:

    1. Find the Feed belonging to username whose Key is exactly the same as identifier.
    2. If no Feed is found, convert the given identifier using the Name-to-Key translation (described above) and find the Feed belonging to username whose Key is exactly the same as the converted value.
    3. If no Feed is found, find the Feed belonging to username whose Name is exactly the same as identifier.

    Thanks to the Name-to-Key conversion rules, the following topics will all publish to the original Feed created in step 2 and be received by the subscriber at test_username/f/Test Mode:

    • test_username/f/Test_Mode
    • test_username/f/Test-Mode
    • test_username/f/Test Mode
    • test_username/f/ Test Mode
    • test_username/f/Test Mode
    • test_username/f/Test -Mode
    • test_username/f/ Test - Mode

    And so on, including any variation of modified capitalization.

    Some variations that include symbols will be converted to URL-safe Keys when looking up the requested Feed:

    • test_username/f/Test(Mode
    • test_username/f/Test\[Mode
    • test_username/f/Test{Mode
    • test_username/f/test modé
    • test_username/f/test' mode

    6. Valid name variations for subscribing

    Subscriptions, on the other hand, must use an exact Name or Key. So, for the given examples, the only topics that will produce the Feed we care about are:

    • test_username/f/Test Mode
    • test_username/f/test-mode

    Naming and Accessing Feeds From the io.adafruit.com HTTP API

    The HTTP API follows the same Feed identifying and Name-to-Key conversion rules as the MQTT API because under the hood they’re talking to the same backend. This means if you’re using the Ruby IO client library, the following will produce publications to the same feed as the MQTT examples given above.

    require 'rubygems'
    require 'adafruit/io'
    
    client = Adafruit::IO::Client.new(key: ENV['AIO_KEY'])
    
    [
      'Test Mode',
      'test mode',
      'test-mode',
      '44'
    ].each do |feed_ident|
      client.feeds(feed_ident).data.send_data(feed_ident)
    end
    

    Potential Problems With Naming

    It really stinks to get taken by surprise in a negative way when working with code. Reducing surprise of the unpleasant sort and increasing predictability and stability are the primary motivating factors for the subtle changes this guide introduces.

    Publishing to an invalid name

    While the Name-to-Key converter keeps things feeling pretty loose and improvisational in terms of referring to Feeds once they exist, if your initial publish is to a Feed that can’t be found it will be rejected if it doesn’t match the rules for valid Feed names.

    In the case of our MQTT example, a publish that looks like this:

    PUB 2948554 to test_username/f/Test Modes[ at 2016-07-11 15:42:31 -0400
    

    would trigger a message on the error feed that looks like this:

    [test_username/errors 2016-07-11 15:42:31 -0400] "Validation failed: Name may contain only letters, digits, underscores, spaces, or dashes"
    

    If the Feed named “Test Modes” already existed, then the publish would work fine, but because it doesn’t Adafruit IO tries to create a Feed with the given identifier, “Test Modes[” as a Name. Since “Test Modes[” is an invalid name, Adafruit IO rejects it :(

    Publishing to the wrong identifier

    If you set up your MQTT subscription first, it’s important to note that no feed will be created, so the Name-to-Key rules laid out above won’t have the effect you may have anticipated. This happens when the Feed you eventually publish to doesn’t end up with the Key or Name your subscriber has requested. The end result is a subscriber that’s silent while your device is merrily publishing away. Maddening! This is a common error of subscription and publishing when trying to juggle the different identifiers that point to a given Feed.

    The safest way to avoid this situation is to make sure that your subscribing topic and your publishing topic are exactly the same. If you want to switch to a different identifier–for example, using a Key instead of a Name–copy the value directly from Adafruit IO. When in doubt, use the Name value.

    The Feed we’re publishing to in the MQTT examples above has the following identifiers:

    key:  test-mode
    name: "Test Mode"
    

    The Name-to-Key translator is how all the “valid name variations” shown above for publishing work, but they only after the Feed already exists. The only way to create this Feed from the MQTT interface is to publish to test_username/f/Test Mode.

    Keeping a browser open to your Feeds page while setting up or programming your Adafruit IO devices is recommended.

    Modifying a name or key

    Remember, changing a Feed’s name will automatically update its Key. This is a change to existing behavior and will require modifications to any systems you’re running that refer to Feeds by Key, but it prevents more confusing situations from occurring.

    Here’s a non-hypothetical scenario that illustrates the trouble when we don’t keep Keys and Names in sync:

    • I make a new Feed and call it, “Light Switch” (IoT light switch, low risk). In JSON, the Feed looks like:
      {
        "name": "Light Switch",
        "key": "light-switch"
      }
      
    • I have a Feather Huzzah controlling a relay, acting as a subscriber listening to username/f/light-switch and a publisher sending data to username/f/Light Switch. Things talk, everything is great with the world.
    • I move the hardware over to a new spot and rename the Feed, “Blender Toggle” (IoT blender, high risk). In a non-sync world, the Feed’s new Name is “Blender Toggle” and it’s Key is still “light-switch. The Feed is now:
      {
        "name": "Blender Toggle",
        "key": "light-switch"
      }
      
    • My subscriber is still listening to username/f/light-switch, so it still gets all the Feed’s messages.
    • I build a new remote control and have it publish to username/f/Blender Toggle and it works, because there is a Feed with that exact name. Everything just keeps working, which is okay for now.
    • Later on, I decide I’d like to build another remote control light switch, so I put together an Arduino MKR1000 publishing to username/f/Light Switch.
    • My new light switch controlling, MKR1000-powered, motion sensor publishes a message to username/f/Light Switch and my blender turns on! What the heck! Hope you’re wearing Kevlar gloves!

    The MQTT Feed routing rules described above mean that a message received on the topic username/f/Light Switch gets routed to the Feed whose Key matches light-switch, which already exists. And controls the blender. Which should not turn on unexpectedly when the room gets dark :P

    This is why we keep all Feed Keys updated to match to their respective Feed Names. In Adafruit IO, renaming the Feed to “Blender Toggle” changes the Key to “blender-toggle”.

    Old Feed:

    {
        "name": "Light Switch",
        "key": "light-switch"
    }
    

    Change Name to “Blender Toggle” and the Feed now looks like:

    {
        "name": "Blender Toggle",
        "key": "blender-toggle"
    }
    

    My existing subscriber would immediately stop working because none of the messages sent to username/f/Blender Toggle (new Name) will get routed to the subscriber listening to username/f/light-switch (old Key). This doesn’t mean the subscriber breaks or shuts down, only that it stops getting messages for now. This is my chance to realize something is wrong and debug my system.

    Here’s the tricky bit, if I go in and make a new Feed and name it “Light Switch”, it’ll get the Key “light-switch”. If I didn’t update my subscriber when it stopped working, that means it’s still listening to username/f/light-switch. When I start posting to my new Feed at username/f/Light Switch, the old subscriber at username/f/light-switch will start getting messages again.

    The best defense against confusion is to refer to the Adafruit IO web interface to double check what the Feed you’re working with has for Name and Key values. And, when you make changes in Adafruit IO always make sure the cooperating systems are updated, especially when dealing with control systems that interact with the world.

    Summary

    If you got this far, I hope it’s clear that this is an area of Adafruit IO we’ve put a particular amount of thought into. Our intention continues to be building a clear, simple, powerful platform for connecting the things you build and we think this refinement supports that intention.

    Please join us at the Adafruit IO forum and share your thoughts, projects, questions, or requests. We’d love to talk to you about what we’re building!

  • Running Code at Intervals Using Adafruit IO

    We introduced time utilities to Adafruit IO about a month ago, but we haven’t provided any examples of how to use the feature. To correct this oversight, we added an example to v0.14.2 of the Adafruit MQTT Arduino Library. This example was a response to a feature request from @phlemoine in the io-issues GitHub repo:

    I am looking for a way to trigger at a specific time in the day… how can I set up the time the trigger starts ? Same for a 12 hours or even 4 hours …

    Here is the relevant code that allows code to be run at 4 hour intervals (midnight, 4am, 8am, etc):

    
    Adafruit_MQTT_Subscribe timefeed = Adafruit_MQTT_Subscribe(&mqtt, "time/seconds");
    
    // set timezone offset from UTC
    int timeZone = -4; // UTC - 4 eastern daylight time (nyc)
    int interval = 4; // trigger every X hours
    int hour = 0; // current hour
    
    void timecallback(uint32_t current) {
    
      // stash previous hour
      int previous = hour;
    
      // adjust to local time zone
      current += (timeZone * 60 * 60);
    
      // calculate current hour
      hour = (current / 60 / 60) % 24;
    
      // only trigger on interval
      if((hour != previous) && (hour % interval) == 0) {
        Serial.println("Run your code here");
      }
    
    }
    

    The full example can be found in the Adafruit_MQTT Arduino Library on GitHub. You will need to install or update the Adafruit MQTT Library to version 0.14.2 in the Arduino Library Manager, and open the adafruitio_time_esp8266 example to get started.

    Are these examples helpful? Please visit our IO forum and share your thoughts.

  • Callbacks Added to the Adafruit MQTT Library for Arduino

    v0.14.1 of the Adafruit MQTT Library for Arduino introduces subscription callbacks. This change will allow users to organize their code into separate blocks by attaching callbacks to feed and group subscriptions. Here’s a simplified example of what the change looks like:

    setup() {
    
      // add the rest of setup code here
    
      // register callback for feed
      onoffbutton.setCallback(onoffcallback);
    
    }
    
    loop() {
    
      // Ensure the connection to the MQTT server is alive (this will make the first
      // connection and automatically reconnect when disconnected).
      // See the MQTT_connect function in the full example for more info.
      MQTT_connect();
    
      // wait 10 seconds for subscription messages
      // since we have no other tasks in this example.
      mqtt.processPackets(10000);
    
      // keep the connection alive
      mqtt.ping();
    
    }
    
    void onoffcallback(char *data, uint16_t len) {
      Serial.print("Hey we're in a onoff callback, the button value is: ");
      Serial.println(data);
    }
    

    In the example above, you can see that we added the call to mqtt.processPackets(10000);. This tells the library to wait 10 seconds (10000ms) for incoming packets before moving on to the next task, and it will block all other code execution. If your sketch is only waiting for subscription messages, then 10 seconds might be a good timeout, but if your sketch handles other tasks, you may want to reduce the timeout to 1 second (1000ms).

    The full example with multiple feed subscriptions can be found in the Adafruit_MQTT Arduino Library on GitHub. You will need to install or update the Adafruit MQTT Library to version 0.14.1 in the Arduino Library Manager, and open the mqtt_esp8266_callback example to get started.

    Are these examples helpful? Please visit our IO forum and share your thoughts.

  • MQTT Error Reporting

    Unlike HTTP, the MQTT protocol does not provide a standard way of reporting errors to connected clients. This poses a problem for Adafruit IO, because there are multiple reasons why sending data to Adafruit IO might fail.

    Here are a few common examples:

    • Publishing data to an invalid topic
    • Publishing data to an unauthorized topic
    • Publishing data too fast (rate limit)
    • Exceeding the number of feeds for your account (10 currently)
    • Sending too large of a payload

    Adafruit IO is not a standard MQTT broker. Normally MQTT brokers will rebroadcast published data to any authorized subscribed client as soon as the data is received, so errors are rarely encountered.

    The standard MQTT pub/sub workflow looks something like this:

    standard mqtt flow

    Adafruit IO’s message flow is a bit more complicated, and looks something like this:

    adafruit io mqtt flow

    In the simplified example above, you can see that there are multiple steps that need to be completed before data is rebroadcasted to subscribed clients. If any of these steps fail, data will not make it back to subscribed clients. The reasons for failure are often unclear to users, so we added two special MQTT topics that will help inform users of any issues related to publishing data.

    The first topic you can subscribe to is the error topic for your user. This topic will receive any errors related to data validation and database saves. The topic path looks like this:

    {username}/errors
    

    For example, if your username was ladyada, you would subscribe to the following topic using your favorite MQTT client:

    ladyada/errors
    

    The second topic you can subscribe to is the throttle topic for your user. This topic contains any messages related to rate limits on your account. You might see these if you are publishing too fast. The topic path looks like this:

    {username}/throttle
    

    Again, if your username was ladyada, you would subscribe to the following topic:

    ladyada/throttle
    

    If you are using the Adafruit MQTT Library, you can define the throttle and error subscriptions at the top of your sketch like this:

    /*************************** Error Reporting *********************************/
    
    const char ERRORS[] PROGMEM = AIO_USERNAME "/errors";
    Adafruit_MQTT_Subscribe errors = Adafruit_MQTT_Subscribe(&mqtt, ERRORS);
    
    const char THROTTLE[] PROGMEM = AIO_USERNAME "/throttle";
    Adafruit_MQTT_Subscribe throttle = Adafruit_MQTT_Subscribe(&mqtt, THROTTLE);
    

    Then, subscribe to the topics at the bottom of the setup function:

    void setup() {
    
      // ...network connection setup code here
    
      // MQTT subscriptions for throttle & error messages
      mqtt.subscribe(&throttle);
      mqtt.subscribe(&errors);
    
    }
    
    

    Finally, inside of the main loop, print any errors to the serial monitor:

    void loop() {
    
      // Ensure the connection to the MQTT server is alive (this will make the first
      // connection and automatically reconnect when disconnected).  See the MQTT_connect
      // function definition further below.
      MQTT_connect();
    
      // this is our 'wait for incoming subscription packets' busy subloop
      // try to spend your time here
      Adafruit_MQTT_Subscribe *subscription;
      while ((subscription = mqtt.readSubscription(5000))) {
        if(subscription == &errors) {
          Serial.print(F("ERROR: "));
          Serial.println((char *)errors.lastread);
        } else if(subscription == &throttle) {
          Serial.print(F("THROTTLED: "));
          Serial.println((char *)throttle.lastread);
        }
      }
    
      mqtt.ping();
    
    }
    

    You can see the full example for the ESP8266 in the Adafruit_MQTT Arduino Library on GitHub. Install or update the Adafruit MQTT Library to version 0.13.3 in the Arduino Library Manager, and open the adafruitio_errors_esp8266 example to get started.

    Are these examples helpful? Please visit our IO forum and share your thoughts.

  • IoT Security: Connecting Your ESP8266 to Adafruit IO with SSL/TLS

    The ESP8266 based Adafruit HUZZAH breakout and the Adafruit Feather HUZZAH are both popular options to use with Adafruit IO. Because ESP8266 SSL/TLS support is fairly new, most of our Adafruit IO examples use the insecure MQTT port 1883.

    Why is this a problem? The MQTT protocol is an insecure protocol on it’s own. All data (including username & password) are sent in the clear, so SSL/TLS is required to protect any sensitive information.

    What are SSL & TLS? Transport Layer Security (TLS) and its predecessor, Secure Sockets Layer (SSL), are cryptographic protocols that you use whenever you browse the internet. Have you ever noticed the lock symbol 🔒 in your browser’s URL bar? That lock symbol represents a secure connection between your browser & a web site over SSL/TLS. We use those same protocols to secure traffic between your ESP8266 and Adafruit IO.

    We have added an example to the Adafruit_MQTT Arduino Library that you can use to secure communication between your ESP8266 and Adafruit IO. Install or update the Adafruit MQTT Library to version 0.13.2 in the Arduino Library Manager, and open the adafruitio_secure_esp8266 example to get started.

    example

    The main changes to the standard ESP8266 example are that WiFiClientSecure is used in place of WiFiClient, and port 8883 is used instead of MQTT port 1883. The sketch also checks the fingerprint for the io.adafruit.com certificate using the verifyFingerprint function.

    A simplified summary of the changes can be seen below:

    #define AIO_SERVER      "io.adafruit.com"
    #define AIO_SERVERPORT  8883                   // 8883 for MQTTS
    
    // WiFiFlientSecure for SSL/TLS support
    WiFiClientSecure client;
    
    // io.adafruit.com SHA1 fingerprint
    const char* fingerprint = "26 96 1C 2A 51 07 FD 15 80 96 93 AE F7 32 CE B9 0D 01 55 C4";
    
    void verifyFingerprint() {
    
      const char* host = AIO_SERVER;
    
      Serial.print("Connecting to ");
      Serial.println(host);
    
      if (! client.connect(host, AIO_SERVERPORT)) {
        Serial.println("Connection failed. Halting execution.");
        while(1);
      }
    
      if (client.verify(fingerprint, host)) {
        Serial.println("Connection secure.");
      } else {
        Serial.println("Connection insecure! Halting execution.");
        while(1);
      }
    
    }
    
    
  • From the Forums: Two Buttons & Two LEDs

    User smcculley posted a useful example in the IO Forum:

    I have had some requests from people to share my code to talk to Adafruit IO using MQTT and being able to trigger two LED’s.

    Note that I am using the latest AdafruitIO MQTT code from GitHub, as it has the latest fixes available: https://github.com/adafruit/Adafruit_MQTT_Library

    In Adafruit IO, I created two feeds, called ledone and ledtwo, and added them to a group called leds. I then created a dashboard with two toggle switches, and tied them to the feeds (one to each, obviously) using the default ON and OFF button text.

    Check out the post for more details. Thanks for sharing!

  • Extending the MQTT Protocol

    Last month we deployed a change to Adafruit IO’s MQTT broker that allowed us to rate limit connection attempts. Although we don’t like to throttle or ban users, the change was necessary to protect Adafruit IO from abuse, and ensure the overall health of the service.

    This presented a problem: How do we inform users when they have been throttled or banned? Ideally the MQTT protocol would allow for us to inform the user using a standard response, but currently the connection acknowledgement packet (CONNACK) has a limited set of response codes.

    The MQTT v3.1.1 protocol has the following values defined for the CONNACK packet response code:

    Value

    Return Code Response

    Description

    0

    0x00 Connection Accepted

    Connection accepted

    1

    0x01 Connection Refused, unacceptable protocol version

    The Server does not support the level of the MQTT protocol requested by the Client

    2

    0x02 Connection Refused, identifier rejected

    The Client identifier is correct UTF-8 but not allowed by the Server

    3

    0x03 Connection Refused, Server unavailable

    The Network Connection has been made but the MQTT service is unavailable

    4

    0x04 Connection Refused, bad user name or password

    The data in the user name or password is malformed

    5

    0x05 Connection Refused, not authorized

    The Client is not authorized to connect

    6-255

     

    Reserved for future use

    The current set of codes didn’t allow us to clearly communicate the reason for disconnects to our users. We have extended the list of codes in the CONNACK packet to include connection throttle (0x06) and ban (0x07).

    Value

    Return Code Response

    Description

    6

    0x06 Connection Refused, throttled

    Client has exceeded connection rate limit. Please try again later.

    7

    0x07 Connection Refused, banned

    The client has been banned by the server administrator.

    We have submitted these two new codes to the OASIS MQTT Technical Committee for comment, and we are adding support to our MQTT client libraries. If you would like to comment on these changes, please visit our IO forum and share your thoughts.

  • Using MQTT Last Will with Adafruit IO

    MQTT’s last will feature allows you to ask the Adafruit IO servers to publish a message to a feed or group on your behalf. This is helpful if you would like to track when your device unexpectedly disconnects due to issues like network or power outages.

    Here are some helpful tips from the IO forum that might help you if you are looking to use MQTT’s last will feature with Adafruit IO:

    • The last will topic must match the normal IO MQTT topic format for feeds or group publishes.
    • Last will is only published by the MQTT broker if the client fails to disconnect cleanly by sending the MQTT disconnect packet.
    • Last will is only published by the MQTT broker if the the keep alive timeout expires, and the last will is not sent if your device reconnects within the timeout window. The Adafruit MQTT Library for Arduino has a default keep alive timeout of 5 minutes.

    Here’s an example of setting a last will message using the Adafruit MQTT Library for Arduino:

    // always set the last will message before calling connect.
    // if the device unexpectedly disconnects, the 'disconnect'
    // feed will receive the 'water monitor disconnected' message.
    mqtt.will("your_username_here/feeds/disconnect", "water monitor disconnected");
    mqtt.connect();
    
  • State of IO 6.14.16

    We’re continuing forward with refactoring our UI so that we can get to a point where it’s easier and quicker to build out new features. The front-end is also going to use the same API V2 that will be the future default API. As another reminder, it would be a good idea to explicitly set ‘/api/v1’ in your paths until you’re ready to upgrade to the ‘/api/v2’.

    Stability of the entire system has been an ongoing project for us. We’re getting there, and continue to add more monitoring and fixes to reduce any future downtime.

    Also, we’re updating our client libraries with new features and bug fixes. If you haven’t tried out the Go client library, now is a good time! If you have any suggestions for our libraries, please let us know in the forums.

    Here are the stats for the past week:

    * 35.6 million inserts of logged data in the last 7 days
    * 12578 users
    * 8,900 online feeds (29554 feeds total)
    
  • Postmortem 06.07.16

    Issue

    We had a brief outage this morning due to a disk space issue on our Sidekiq EC2 instance. One set of log files grew to almost 20GB, which is strange because they are setup to be rotated using logrotate. The files should have been limited to 700MB max. According to logrotate status, it last ran on 6-1-16, when it should run daily via cron.

    Fix

    logrotate is now setup to run hourly, and we are going have monit monitor disk space on all of our EC2 instances so we can catch this issue in the future.

  • New Client Library in Go

    We are pleased to announce the release of a new officially supported client library for the Adafruit IO API! We now have an client library for Go. This client meets a few goals for us, and hopefully provides a useful hook into Adafruit IO for curious and interested web developers.

    It’s my (Adam) first project with the IO team, and so is a good starting place for exploring both the external API and the internal systems that drive it. It’s also a good chance for me to introduce my teammates to Go which is a very pleasant language to write web-connected code in. I’m a Rubyist by trade but exploring Go for lower level and Machine-to-Machine web services. I like it.

    More client libraries means broader coverage of the Adafruit IO API. As web developers, we aren’t often forced to think of the systems we build from the outside in. By making a public API and building the client libraries for it, we have a chance to see what works and doesn’t work. That’s both from a design perspective–is this API “friendly”?–and from a very practical perspective. For example, I committed two bug fixes to Adafruit IO’s core codebase while building io-client-go, huge success! Today, this library covers version 1 of the Adafruit IO API, but we’re hard at work on version 2.

    More client libraries means more open doors for new developers. Adafruit IO’s primary goal is to be the easiest way to get your Internet of Things project online. That involves a big team of people at Adafruit working at every part of the stack: engineers building new hardware and writing new firmware, makers coming up with new projects and spending a lot of time on clearly communicating what they’re doing, web developers inventing new ways of building an accessible Internet of Things platform, and, MOST IMPORTANTLY, an awesome crowd of people who can think of things to do with the tools we build that we cannot think of ourselves.

    This library isn’t the ending place for anyone’s project, but it could be the starting place for all kinds of interesting work. We don’t know! That’s the point! Here, take this, we made it for you, enjoy! :D

    This isn’t the first client library we’ve built and it won’t be the last. If Go isn’t your style yet, make sure to check out similar tools in Python, Javascript, and Ruby. And when you’re using the things we’ve built in the Things you’re building, feel free to talk to us and tell us what’s good, what’s bad, or what you’d like to see. Leave a note in the bug tracker, on the forum, or in the respective client library’s GitHub repository.

    And please, show us what you’re making! We would LOVE to see it almost as much as (I hope) you loved to build it. Also, speaking as a new member of the Adafruit team, I have never met a group of people more genuinely committed to supporting people at every level of experience than here at Adafruit.

    As always, Adafruit’s open source work is supported by the clever, creative folks who shop at Adafruit and by the community that contributes in code to any of our open source projects.

    Current status:
  • MQTT Time Utilities

    We will be deploying a new feature to our MQTT broker tomorrow morning. We will start broadcasting the current time in two formats at time/ISO-8601 and time/seconds at one second intervals. This should allow users to easily keep track of the current time from devices without real time clocks.

    Here are a couple examples of the payloads:

    ISO-8601:

    topic: time/ISO-8601
    payload: 2016-06-01T21:34:12.629Z
    

    Seconds since Unix epoch:

    topic: time/seconds
    payload: 1464816851
    
  • MQTT Connection Throttle

    We did some profiling of our node MQTT workers using the --prof flag today, and we found that our workers were spending an excessive amount of time handling MQTT connection authorization. It turns out that a few users were hammering our servers with failed auth attempts, so we decided to implement a rate limit for MQTT connection attempts.

    The new connection rate limit allows for 50 connection attempts in a 15 minute window, and attempts past the limit will be rejected for the remainder of the window. If you would like to comment on this change, please visit our IO forum.

  • Please welcome Adam to the Adafruit team!

    Hello all you lovely makers! I am very excited to introduce myself: my name is Adam Bachman, I am here to write code and chew bubblegum, and I am all out of bubblegum! As of May 23, 2016, I am the newest member of the Adafruit team and will mainly be working with Justin, Todd, Tyler, and the rest of the incredibly talented folks making Adafruit IO the best it can be.

    I’ve been a resident of Baltimore City, making my way through the world as a software developer for the last 10 years. By day building software for Fortune 500’s, startups, bootstrapped artist-loving theater makers, and a few in between. On my own time I’ve been an Adafruit customer since 2007, started a hackerspace in 2009, and I’m super into Processing and creative code in general.

    You can follow me on Github or Twitter if you like, though I can’t promise to be half as interesting as the people at the middle of this incredible enterprise :D

    ENOUGH ABOUT ME! I look forward to connecting with anyone crossing boundaries from software to hardware and back again. Artists, makers, hobbyists, professionals, first-timers, long-timers, indie, corporate, all of you, everyone, cats, maybe not so much dogs, whatever! I am psyched to get started, let’s make amazing things!

  • AIO Keys Backend Updates

    We’ve made some more backend changes to how the AIO Keys are generated and maintained. If you run into any authentication or strange AIO Key issues please let us know as soon as possible in the IO forum or Issues Tracker.

    Most of the changes were security enhancements, but we’re laying the groundwork for more features specifically related to the AIO Keys, including added administration functionality.

  • Multicolumn Index Order in Postgres

    We started to notice some speed issues yesterday with certain queries in one of the largest tables (~50 million rows) in our PostgresSQL database, and we wanted to share some of the results of the investigation.

    During our tests today, we noticed that the slow queries ordered by id DESC were running in about 5 seconds, and queries that were ordered by created_at DESC were running in 0.1 milliseconds. Multicolumn indexes were present for both queries to use, and EXPLAIN ANALYZE showed that the queries hitting those indexes with an index scan.

    This led to the obvious question: wtf?

    After some investigation, we found that the order of columns in the index were reversed. One had the columns defined as (feed_id, created_at DESC) and the other had the columns defined as (id DESC, feed_id). After looking at the PostgresSQL docs for multicolumn indexes, the issue was clear.

    It turns out that you need to define your indexes with a constraint (feed_id) first, so that you are only scanning a portion of the index. By defining id first, the full index was scanned, which resulted in very slow queries. We switched the order of the columns in the index to (feed_id, id DESC) and the queries are now running in the ~0.1 ms range, so you should notice that things are now much more responsive.

    Please check out the relevant docs in the PostgresSQL 9.5 manual if you would like more info about multicolumn indexes.

  • State of IO 05.01.16

    We are considering a change to the way IO handles the retain flag on MQTT publish packets. The retain flag is used to allow the MQTT broker to retain the sent value, and will tell the server to pass it to any new subscribers as soon as they connect. We found that this feature was a little hard for people to understand at first, so we decided to force the retain flag to true for users by default. This change ensured that users always got the current state of their IO feeds as soon as they connected, without having to send a HTTP request to the REST API for the current value.

    The decision to force the retention of values caused issues with some users, because they lost the option to decide which values were cached. We are planning to revert this change, and give people the option to cache the values using the retain flag.

    In addition to this change, we are thinking of extending the meaning of the retain flag, and also allowing users to decide which values are logged to the database. So for example, if you wanted to push out temperature values every second to your connected devices, but only wanted to log the temperature value every minute, you could do so by only setting the retain flag to true for the values you wish to log. This should allow for greater flexibility when logging, and will result in increased speed for feeds that are focused on realtime interaction. We welcome your feedback in the IO forum.

    If you would like to read more about the MQTT retain flag, please check out this article on HiveMQ’s blog.

    Here are the stats for the past week:

    * 29.03 million inserts of logged data in the last 7 days
    * 10,969 users
    * 8,675 online feeds (24,277 feeds total)
    
  • REST API v2 Deployment on April 21st

    On Thursday, April 21st we will be deploying Version 2 of our API. This version is quite different from our existing API V1.

    IMPORTANT: Your code or sketches will need to be updated if you are using the REST API.

    From now until Thursday, you will want to update your code or sketches to change ‘/api/…’ to ‘/api/v1/’ so that you continue using v1 of the API until you are ready to upgrade to the latest version.

    Here are some of the highlights (not including bug fixes):

    NEW

    • New permission system that will allow for sharing read and write access to your feeds, groups, & dashboards with other users.
    • New AWS inspired HTTP request signing to help avoid exposing the user’s AIO key over insecure connections.
    • Dashboards, blocks, & triggers will be able to be modified via the REST API.

    CHANGES

    • Username will be a required component of the URL.
    • You will no longer be able to access feeds & groups via numeric ID. Feed key & group keys will be used as the unique identifier in API v2.
    • Feeds will be able to be added to many groups, and the feed’s data will be namespaced to the group the data is pushed to. You will also be able to access all of the feed’s data by accessing the feed directly.
  • Trigger Emails Temporarily Disabled

    We’re temporarily disabling the email triggers until we can make them more robust in a near future update. In the meantime, the alternative would be to use our IFTTT channel, which can do pretty much the same thing as our internal trigger emails.

    We want to build a much more robust system. As is, there are some weaknesses in our current design that can trigger emails to be sent far too often, or without a way for them to reset after the trigger threshold has been hit.

    If you have any suggestions on what you’d like to have implemented with this feature, please let us know at the our IO forum.

  • State of IO 4.17.16

    This week we will be deploying two major changes to IO. We will be deploying v2 of the REST API, and we will be moving our MQTT services from mosca to aedes. This should allow us to squeeze even more performance out of our MQTT workers, and will also allow us to support MQTT QoS 2.

    Here are the stats for the past week:

    * 28.69 million inserts of logged data in the last 7 days
    * 10,512 users
    * 8,077 online feeds (22,695 feeds total)
    
  • State of IO 4.10.16

    Here are the stats for the past week:

    * 30.21 million inserts of logged data in the last 7 days
    * 10,086 users
    * 7,766 online feeds (21,498 feeds total)
    * ~50 inserts per second via MQTT
    * ~5 inserts per second via REST API
    

    After some load testing, it seems that our current server configuration is able to handle more traffic. Our current theory is that the inserts per second aren’t rising evenly with the increased online feed count because users are using IO for real-time interaction, and not data logging. Inserts per second only seem to rise with heavy and persistent data logging projects.

    LoRa IO

    We have been testing the new Feather LoRa Radios with IO, and they seem to be a fantastic pair. We were able to send messages to IO through a LoRa gateway from 1.27 miles away in the rolling hills of central Maryland using a small wire antenna.

    LoRa IO

    Pretty impressive for not having line of sight to the gateway!

    LoRa Mesurement

  • State of IO 4.3.16

    We added support for AWS v4 inspired request signing to IO’s v2 REST API this week. This change should allow devices that don’t support TLS/SSL to communicate with Adafruit IO without sending their AIO Key in the clear. Because the requests are signed using a HMAC, users also will be able to ensure that their requests were not manipulated by things like man-in-the-middle attacks. This change will also reduce the risk of replay attacks by including a timestamp in the signature, so the request will only be valid within a 15 minute window.

    We are considering requiring signed requests for any API v2 requests that don’t use a TLS/SSL connection. If you think this is a bad idea, please let us know in the forums. We will be updating the Adafruit IO client libraries this week to support the new request signatures.

    Here are the stats for the past week:

    * 27.4 million inserts of logged data in the last 7 days
    * 9,744 users
    * 7,537 online feeds (20,474 feeds total)
    * ~50 inserts per second via MQTT
    * ~5 inserts per second via REST API
    

    Inserts per second seem to be holding steady, despite the increase in online feeds. We are going to add another queue worker and monitor the inserts per second to see if that fixes the bottleneck.

  • State of IO 3.25.16

    We have been working on finishing up v2 of the REST API this past week, and you can read more about that here.

    We are also in the process of finishing up transitioning our frontend javascript to React from jQuery and Backbone. When combined with API v2, this change should increase performance, and also will make development easier and faster. We will post more about this change in the next few days.

    Here are the stats for the past week:

    * 25,951,672 inserts of logged data in the last 7 days
    * 9,296 users
    * 6,949 online feeds (19,084 feeds total)
    * ~50 inserts per second via MQTT
    * ~5 inserts per second via REST API
    
  • REST API v2 Development

    We are currently in the process of developing version 2.0 of the Adafruit IO REST API, which should address a large portion of user requests. The current version of the REST API (v1.0) will still be available at io.adafruit.com/api/v1/.

    Here are some of the highlights (not including bug fixes):

    NEW

    • New permission system that will allow for sharing read and write access to your feeds, groups, & dashboards with other users.
    • New AWS inspired HTTP request signing to help avoid exposing the user’s AIO key over insecure connections.
    • Dashboards, blocks, & triggers will be able to be modified via the REST API.

    CHANGES

    • Username will be a required component of the URL.
    • You will no longer be able to access feeds & groups via numeric ID. Feed key & group keys will be used as the unique identifier in API v2.
    • Feeds will be able to be added to many groups, and the feed’s data will be namespaced to the group the data is pushed to. You will also be able to access all of the feed’s data by accessing the feed directly.
  • AIO Key Length Changes

    We had a request in the forums to reduce the length of the AIO Key to 32 characters, and we decided to use UUID v4 (with the dashes stripped) to generate keys. Version 4 UUIDs are randomly generated, so they should work well as AIO Keys:

    …after generating 1 billion UUIDs every second for the next 100 years, the probability of creating just one duplicate would be about 50%.

  • Testing Cassandra Reads

    We have been writing user’s feed data to both Cassandra 3.3 and PostgreSQL 9.5 for the past couple weeks as the first step in transitioning fully to Cassandra as the primary data store for feed data. We will still be using Postgres as our primary database for relational data, but it should be much easier to scale Cassandra horizontally as the large amount of logged data increases.

    Here’s the current write performance data from Cassandra’s nodetool tablestats:

    Write Count: 59051081
    Write Latency: 0.012758596713919598 ms.
    

    That’s a little over 59 million writes in the past ~17 days, with the load on a m4.large barely ever passing 0.05.

    load average: 0.01, 0.01, 0.05
    

    Today, we have also started testing read performance in production. For now users are still receiving their data from Postgres, but we are also hitting Cassandra to see if our configuration can handle production loads. We’ll post an update once we have more info about how reads are performing.

    Here’s some early info after the deploy:

    Read Count: 314
    Read Latency: 0.6644044585987261 ms.
    
  • Sending Commands to Multiple EC2 Instances Using dsh

    We moved Adafruit IO’s node.js services to a group of t2.nano EC2 instances, and I wanted to document my dsh setup. I used it reguarly a couple years ago for managing the backend workers when working on other services, but I had forgot how it was configured. It came in really handy when I needed to quickly check or kick anything on the servers.

    First, you will need to install dsh using brew, apt-get, yum, etc:

    $ brew install dsh
    

    You will need to make a couple config directories for your user:

    $ mkdir -p ~/.dsh/group
    

    Create a new dsh.conf file using your favorite text editor:

    $ vim ~/.dsh/dsh.conf
    

    Paste the following config into ~/.dsh/dsh.conf, and save the file:

    showmachinenames = 1
    remoteshell = ssh
    

    Now, you can create a dsh group for the set of servers you would like to send commands to. Create a new file called example in the ~/.dsh/group folder using your favorite text editor:

    $ vim ~/.dsh/group/example
    

    Enter the host names for your servers, and save the file:

    example-1.adafruit.com
    example-2.adafruit.com
    example-3.adafruit.com
    example-4.adafruit.com
    

    Now you can send commands (like uptime) to all servers in the group using the following command:

    $ dsh -g example -w 'uptime'
    example-1.adafruit.com:  14:17:44 up 17:15,  0 users,  load average: 0.08, 0.03, 0.05
    example-2.adafruit.com:  14:17:43 up 16:36,  0 users,  load average: 0.00, 0.01, 0.05
    example-3.adafruit.com:  14:17:45 up 16:41,  0 users,  load average: 0.00, 0.01, 0.05
    example-4.adafruit.com:  14:17:45 up 16:41,  0 users,  load average: 0.00, 0.01, 0.05
    

    Using -w will send the command to each server in the order they appear in the group config, and will wait for a response before continuing. If you want to send the commands concurrently to all servers in the list, use the -c option to send the command:

    $ dsh -g example -c 'uptime'
    example-1.adafruit.com:  14:22:42 up 17:20,  0 users,  load average: 0.00, 0.01, 0.05
    example-3.adafruit.com:  14:22:42 up 16:46,  0 users,  load average: 0.00, 0.01, 0.05
    example-2.adafruit.com:  14:22:41 up 16:41,  0 users,  load average: 0.00, 0.01, 0.05
    example-4.adafruit.com:  14:22:42 up 16:46,  0 users,  load average: 0.10, 0.05, 0.05
    

    You can get an interactive shell for all servers in the group by using the -c and -i commands together. Use CTRL-D to exit the session:

    $ dsh -g -c -i
    
  • State of IO 3.18.16

    Adafruit IO has been growing steadily, and we decided to add a changelog so it’s easier for users to see what we are up to. We will be posting here reguarly whenever we add or update features, and we will also be posting stats so you have more information about the growth of IO.

    We have moved IO to a handful of Amazon EC2 instances, and we are finding it much easier to deal with increased load. The individual services are now split out into separate instances, which will allow us to scale horizontally.

    Here’s a screenshot of what it looks like when we are monitoring the state of the new EC2 instances:

    IO on EC2

    We have added IO to the Adafruit Status Page, which will allow you to check and see if any of IO’s components are currently down. You can also follow @adafruitstatus if you would like to be notified of outages.

    Adafruit Status Page

    Here are the stats for the past week:

    * 24,290,428 inserts in the last 7 days
    * 8,997 users
    * ~6,700 online feeds (~18,200 feeds total)
    * ~50 inserts per second via MQTT
    * ~5 inserts per second via REST API