Posts Tagged ‘python’

$30 BakeBit Starter Kit Adds Sensors & Buttons to Your NanoPi NEO & NEO Air Boards

January 20th, 2017 1 comment

FriendlyElec (previously FriendlyARM) launched NanoPi NEO and then NanoPi NEO Air board as respectively Ethernet and WiFi/Bluetooth connected boards for IoT applications. But so far, there was no ecosystem around the board, you had to use your own sensor modules, and write your own software to control them. This has now changed with the launch a BakeBit Starter Kit with twelve sensor modules, a NanoHat Hub add-on board designed for NanoPi boards, as well as BakeBit Library to control the hardware.

NanoPi NEO with NanoHat and Two Modules

The NanoHat Hub plugs into the two NanoPi NEO headers and provide 12 headers with 3x I2C interfaces, 3x analog interfaces, 2x UART interfaces, and 4x digital interfaces among which D3 and D5 support PWM, compatible with SeeedStudio Grove modules. You then have a choice of 12 modules to connect to the NanoHat Hub:

  • OLED Module
  • Ultrasonic Module
  • Green LED Module
  • Red LED Module
  • LED Bar Module
  • Rotary Angle Sensor Module
  • Joystick Module
  • Sound Sensor Module
  • Button Module
  • Light Sensor Module
  • Buzzer Module
  • Servo Module

BakeBit Starter Kit – Click to Enlarge

But now that you have your hardware setup with multiple module, you still need to program the thing, and that’s where BitBake library, based on Grove Pi, comes into play, as it allows you to program the module easily with Python programming. More details can be found in the Wiki for BakeBit NanoHat and modules.

BakeBit Starter Kit is now sold for $29.99 (promotion), but if you already have Grove modules, you could also simply purchase NanoHat Hub for $12.99. Bear in mind that Chinese New Year is around the corner, so any order passed after January 24th and beyond, will be processed after the holidays around February 6th. [Update: The company has also released a $9.99 NanoHat PCM5102A audio board for NanoPi Boards]

39 Euros FiPy Board Supports Sigfox, LoRa, LTE Cat M1/NB1, Bluetooth 4.2, and WiFi (Crowdfunding)

November 24th, 2016 1 comment

Long range LPWAN solutions have just started to hit the market, and there are so many standards such as Sigfox and LoRa that it’s difficult to know who will eventually be the winner, or if different standards will co-exist over the long term, and in a general sense it might not be so easy to decide which one is best suited to your project without experimenting first. Pycom has a solution to this problem, as they’ve made a board similar to LoPy with WiFi, Bluetooth, and LoRa, but instead included 5 long and short range IoT protocols: Sigfox, LoRa, LTE Cat M1 & Cat NB1, Bluetooth, and WiFi.

pycom-fipy-boardPycom FiPy board specifications:

  • SoC – Espressif ESP32 dual core Tensilica L108 processors @ up to 160 MHz with BT 4.2 and WiFi
  • System Memory – 4MB RAM
  • Storage – 8MB flash memory
  • Connectivity
    • WiFi 802.11 b/g/n @ 16 Mbps up to 1 km range & Bluetooth 4.2 with common u.FL antenna connector and chip antenna
    • LoRa and Sigfox transceiver
      • common u.FL antenna connector, RF switch
      • Lora
        • 868 MHz (Europe) at +14dBm maximum
        • 915 MHz (North and South America, Australia and New Zealand) at +20dBm maximum
        • Node range up to 40 km, nano-gateway range up to 22 km (max 100 nodes).
        • Power Consumption – 10mA Rx, 28mA Tx
      • Sigfox
        • Maximum Tx power – +14dBm (Europe), +22dBm (America), +22dBm (Australia and New Zealand)
        • Node range up to 50km
        • Operating Frequencies
          • RCZ1 – 868MHz (Europe)
          • RCZ2 – 902MHz (US, Canada and Mexico)
          • RCZ3 – (Japan and Korea)
          • RCZ4 – 920 – 922MHz (ANZ, Latin America and S-E Asia)
        • Power Consumption
          • Sigfox (Europe) – 17mA in Rx mode, 47mA in Tx mode and 0.5uA in standby
          • Sigfox (Australia, New Zealand and South America) – 24mA in Rx mode, 257 mA in Tx mode and 0.5uA in standby
    • Cellular LTE CAT M1/NB1 transceiver
      • u.FL antenna connector and nano SIM socket
      • Operating frequencies – 34 bands supported from 699 to 2690MHz
      • 3GPP Release 13 LTE Advanced Pro
      • Peak power estimations – Tx current = 420mA peak @ 1.5Watt Rx current = 330mA peak @ 1.2Watt
  • Expansion – 2x 14 pin headers with UART, 2x SPI, 2x I2C, I2S, SDIO, 8x 12-bit ADC, 2x 8-bit DACs, up to 16 PWMs, up to 22 GPIOs
  • Misc – WS2812 RGB LED, reset switch, 32 KHz RTC (in SoC)
  • Dimensions – 55 x 20 x 3.5 mm
  • Temperature Range – -40 to 85 degrees Celsius
  • Certifications – CE, FCC,  Sigfox network certification, LoRa Alliance certification, LTE-M CAT M1/NB1 cellular –  global networks


FiPy name is most probably derived from Five IoT protocols, and microPython support. As the board is compatible with WiPy, LoPy and SiPy you can use the usual Pymakr IDE and Pymate Mobile app to write your program and control the board. The company has also introduced two new add-on boards:

  • PySense board with an ambient light sensor, a barometric pressure sensor, a humidity sensor, a 3-axis 12-bit accelerometer, and a temperature sensor, as well as a micro SD card, a micro USB port, and a LiPo battery charger
  • PyTrack board with a GNSS + Glonass GPS and a 3-axis accelerometer, as well as a micro SD card, a micro USB port, and a LiPo battery charger. This can be very useful to track moving assets such as cars or bicycles.

FiPy and PyTrack

The project has just launched on Kickstarter as already surpassed its 25,000 Euros funding target. Most early bird rewards are gone, but you can pledge 39 Euros for FiPy board,  59 Euros (Early bird) for PySense Kit, 65 Euros (Early bird) for PyTrack kit, optionally adding 7 Euros for a Sigfox/Lora antenna, and 7 Euros more for an LTE-M cellular antenna. Shipping adds 8 to 25 Euros depending on the selected rewards, and delivery is scheduled for April 2017. Just a warning for users who are not based in the US or Europe: please make sure you comply with your country regulations, especially in terms of frequency used, as such nodes will have multiple kilometers range, and you may not want to break the law, and possibly get a visit from your local police or military…

A Closer Look at Ingenu RPMA Alternative to LoRa or Sigfox LPWAN Standards & RPMA Development Kit

November 20th, 2016 6 comments

I’ve recently started to write a bit more about long range LPWAN standards for IoT applications, especially LoRa and Sigfox, as commercial networks are being launched, and relatively low cost hardware platforms are being introduced to the market. There are also other highly expected standards such as Weightless and LTE Cat M that will bring more competition to the market. Ingenu RPMA (Random Phase Multiple Access) is another available standard that’s been in deployment for a while, and based on an earlier comparison of  long range LPWAN standards, it comes with long range, supports up to 384,000 nodes per “sector”, operates in the unlicensed 2.4 GHz ISM band, and offers high combined uplink and downlink bandwidth than competitors. Ingenu recently contacted me and provided some more details and information about their technology and development kit.

One of the documents includes an “independent analysis completed by ABI Research, Inc.” comparing features of Sigfox, LoRa, EC-GSM-IoT, MB-IoT, LTE Cat-M1,  and RPMA.

Click to Enlarge

Click to Enlarge

All standards can have node powered by a battery for over 10 years, but based on that table RPMA does seems to have some advantages in terms of coverage, capacity, throughput, security level, scalability, and mobility support.

Click to Enlarge

Click to Enlarge

Those charts are extracted from the Ingenu’s marketing documents, so they’ll obviously show RPMA in a positive light. However it does seems that if you have lots of nodes, and bandwidth requirements higher than what can be delivered by LoRa or Sigfox, RPMA appears to be a potentially better solution. The 2.4 GHz band is normally quite busy, so I wonder if there could be some limitations here, and some countries may also have restrictions on the emitted power. RPMA deployments started in 2011, so they already have an installed base on several continents for industrial, agricultural, and security applications, which includes 38 Private Networks as well as the “Machine Network” in North & South America, EMEA, and APAC regions.

ingenu-rpma-networksSupport in the Asia Pacific regions is certainly a plus, as this week a French company wanted to send me their Sigfox & LoRa sensors kits for evaluation, but they had nothing working in South East Asia, so it will be for a little later.

The company can provide RPMA devkit to their customers in order to get started and evaluate the technology.

Click to Enlarge

Click to Enlarge

Ingenu RPMA development kit key features and specifications:

  • MCU – NXP Kinetis K20 ARM Cortex-M4 MCU @ 50 MHz
  • Connectivity
    • nanoNode RPMA radio module (NODE103)
      • Wireless Frequency – 2.4 GHZ ISM
      • Bandwidth – 1 MHz
      • Modulation – Dynamic Direct Sequence Spread Spectrum (D-DSSS)
      • Access Point Capacity – Up to 64,000 nodes in star topology
      • Typical Power – Tx: 800 mW; Rx: 250 mW
    • u-Blox GPS module
  • Expansion – Header with analog & digital GPIOs and UART
  • Debugging – JTAG header, UART for serial debugging
  • Battery Life – Up to 20+ years
  • Power Supply – 5V/1A power supply to DC jack (J204), 2.2 to 3.6V DC batteries to J201 header
  • Dimensions – 107 x 68 x 13 mm
  • Temperature Range – 0°C to 85°C
  • Certifications – FCC, IC, ETSI, and others (pending) for some specific countries

The rACM (reference Application Communication Module) tools are used to control the kit, and since they are written in Python it will work on Windows, Mac OS X or Linux. Communication occurs over a REST API or Advanced Message Queuing Protocol (AMQP) open standard messaging protocol, and devices can be managed through a platform called Intellect. Quick Start Guides are also provided to customers to show how to set up pulse meters, UART, GPIO, and more…


You’d use the devkit with RPMA networks such as the Machine Network. You can check network coverage on Ingenu to find out if it is available in your location. If there’s no network in your location, but a network is expected soon, you can still evaluate RPMA technology by getting an Exploration Kit with two RPMA devkits and a rental RPMA access point. The latter gives some clue about about the use cases for RPMA, as while you can get one or two ~50 Euros LoRa nodes connected it to a LoRaWAN network or setup P2P communication, RPMA apparently requires an access point that expensive enough that it has to be rented. So RPMA is likely most suitable and cost effective for larger scale IoT deployments, and not for smaller or hobbyist’s projects.

You’ll get some more details about the hardware and software, as well as interesting case studies about existing implementations, on the Get Started page, or by directly downloading the Starter Pack with hardware design files, software tools, REST & AMQP source code examples, and documentation.

GR-LoRa is a Reverse-Engineered Open Source Implementation of LoRa PHY

November 15th, 2016 8 comments

LPWAN standards such as LoRa or Sigfox allow you to transmit data over long distance, at ultra low power (up to 10 years on a AA battery), and for free if your use your own network (P2P or gateway), or a few dollars per years if you go through a network provider. The low cost is possible since those standards rely on 900 MHz ISM bands, meaning nobody has to pay millions of dollars to the government to obtain a license fee. Matt Knight looked at LoRa, and while Level 2 and 3 of the protocol (LoRaWan) has public documentation, Level 1 (LoRa PHY) is proprietary and the standard is proprietary.

microchip-rm2903-ettus-b210-sdrSo he decided to reverse-engineer LoRa PHY using Microchip RN2903 based LoRa Technology Mote and Ettus B210 USB software defined radio, and software packages and tools such as Python and GNU Radio to successfully deliver GR-LoRa open source “GNU Radio OOT module implementing the LoRa PHY”.  He presented his work at GNU Radio Conference 2016 on September 15, and the video is worth a watch. He first explains why LPWAN IoT standards are awesome, the motivation about reverse-engineering work (mostly security), the hurdle (e.g. lies in documentation), the results, and work to be done.

You’ll find the presentation and the research paper on Github.

Thanks to Emanuele for the tip.

How to check HTTP Header and Connection Stats from the Command Line

October 3rd, 2016 1 comment

A few days ago, I discussed with somebody whether a file was cached by Cloudflare or not, and this involved getting the HTTP header, and checking for CF-RAY field to see if data is going through one of Cloudflare data centers. This can be done with curl:

In the command above, -s stands for silent so that curl does not show the progress meter, -v stands for verbose to show the header, and -o /dev/null is used to discard the packet load.

You can also use -I option (fetch the HTTP-header only) with curl, which – if all you need is the HTTP header – provides a cleaner output:

I also came across httpstat Python script recently via n0where, doing much of the same thing, except it also adds transfer statistics.
It can be installed by downloading, or better using pip:

Let’s try it with this very blog:

The header is the same as with Curl -I, and for good reason, since httpstat relies on curl, and all curl options (except for -w, -D, -o, -s, -S) can be used with the command line. This script can be useful if you are trying to benchmark and lower TTFB (Time To First Byte), or decrease overall download times from your server.


Getting Started with ReSpeaker WiFi IoT Board’s Audio Capabilities, Voice Recognition and Synthesis

August 27th, 2016 8 comments

ReSpeaker is a development board combining an Atmel AVR MCU, a MediaTek MT7688 WiFi module running OpenWrt, a built-in microphone, an audio jack, and I/O headers to allow for voice control and output for IoT applications. That means you could make your own Amazon Echo like device with the board and add-ons, use it as a voice controlled home automation gateway and more. The board was launched on Kickstarter a few days ago, and already raised $100,000 from about 100 backers, but I’ve received an early sample, so I’ll provide some more information about the firmware, and shows how to use with some Python scripts leveraging Microsoft Bing Speech API.

Click to Enlarge

Click to Enlarge

You’ll need a micro USB to USB cable to connect your to computer (Linux, Windows, Mac OS…), and a speaker to connect to the board. Linux (OpenWrt) boots in a few seconds, and once it’s done all RGB LED will continuously blink.

I’m using a computer running Ubuntu 16.04, and ReSpeaker is detected by the system as an Arduino Leonardo board:

That’s optional, but if you want you can access the serial console, with programs like Minicom, screen, putty or hyperterminal and set the connection to 57600 8N1 to access the command. Here’s the full boot log:

If you think something is odd here… That’s because the serial connection will miss some characters. This happens with two computers and different USB cables. Hopefully this is either a specific issue with my sample, or if it is an issue it will be fixed by the time boards ship to Kickstarter backers [Update: The company explained me that it’s because the Atmel 32u4 and Mediatek MT7688 share the same USB port]. So instead of using the serial console, I’ll use SSH instead which means I have to connect to ReSpeaker WiFi access point first, and configure it.

LinkIt_Smart_Access_PointReSpeaker will show as LinkIt_Smart_7688_XXXXX, because the WiFi module is exactly the same as LinkIt Smart 7688 IoT board, and unsurprisingly the configuration interface is exactly the same.ReSpeaker_WiFi_PasswordFirst set the root password, and login with that password.

ReSpeaker_Station_Mode_OpenWrt_LUCIThen go to Network tab, select station mode, and connect to your access point by entering your password. Click Configure, and you’re done. As you can see on the right above, you can also use OpenWrt’s LUCI interface to configure networking.

Now find ReSpeaker IP address via your Router DHCP client list, arp-scan, or other method:

You can now connect to the board via SSH:

and use the password you set in the web interface.

Now let’s check some CPU information:

We’ve got Mediatek NT7688 MIPS24K processor as advertised, so let’s check a few more details:

The board runs Linux 3.18.23, has 7.6MB available storage, and 128MB RAM in total.

I’m not going to test the audio features with command tools, and python script, and also include a video demo at the end of this review.Since I don’t have ReSpeaker Microphone array add-on, I have to be fairly close to the microphone for it to work well, maybe one meter at most, or the volume would be really low.

I’ll start by checking audio recording and playback with any API or internet access requirements.
We can record audio with 16000 sample rate, 16 bit width, 1 channel using the following command

and play it back with aplay:

It worked OK for me, although the volume seemed quite low.

Now we can do something a little more interested as Seeed Studio develop a few Text-to-speech and Speech-to-text Python scripts. You can retrieve the scripts from ReSpeaker github account, and install one dependencies to setup the board:

The script are using Microsoft Speech API, but in theory you could use any other speech API. Since Seeed Studio has already done all the hard work, I simply applied for a Microsoft peech API key in order to be able to use the demo.

Microsoft_API_KeyThat’s free for testing / evaluation, but if you intend to use it in commercial products, or for your own case, if you use more 5,000 transactions per month, you’d need to purchase a subscription.

You’ll find three Python scripts in the directory namely:,, Look for BING_KEY inside each script, and paste your own key.

Time to have some fun, starting with the speech to text script:

It’s pretty slow to start (about 15 seconds), and then there are a few error message, before you can see the “* recording” message, and you can talk, with Bing returning the results: “Bing:你好”. Chinese? Yep, as currently the default is Chinese, but if it is not your strongest language, you can edit, and change the language replacing zh-CN by en-US, or other language strings:

An English works too (sort of):

In the first sentence, I said “Hello World! Welcome to CNX Software today”, but it came out as “hello world next software”, maybe because of my accent, but I doubt it…

Then I wanted to try Thai language, but I got an API failure simply because the number of supported languages by Microsoft Speeach API is limited as shown in the table below.

language-Country language-Country language-Country language-Country
ar-EG* en-IN fr-FR pt-BR
ca-ES en-NZ it-IT pt-PT
da-DK en-US ja-JP ru-RU
de-DE es-ES ko-KR sv-SE
en-AU es-MX nb-NO zh-CN
en-CA fi-FI nl-NL zh-HK
en-GB fr-CA pl-PL zh-TW

If your language is not listed here, then you could Google Speech API instead, and it’s likely Seeed Studio or the community will have written compatible scripts by the time ReSpeaker boards ship to backers.

So you now know how to convert your voice to text, and you can use that text to send a web search, or toggle GPIOs, but you may also want to get an audio answer to your action, and script is there for your, and very easy to use:

It did not really feel realistic, but at least I could understand the female voice in the speakers. Looks in the script I did not see any language settings, so I assume the API will automatically detect the language, and inputted a string in French instead, and all I heard was gibberish. Finally I found that you can change the voice language in script with contains most of the code:

I replaced the US female voice, but a French male voice, added a “famous French saying”:

At least it was understandable, but Microsoft has still some work to do the audio output was more like “Salut mon gars. commencer a va?”. The reason could also be that the correct writing is “Comment ça va”, but the terminal (set to UTF-8), did not let me input “ç”.

You can watch all those demo in the video below to get a better feel about the audio quality, delays, and capabilities of Microsoft Bing Speech API.

Onion Omega2 is a $5 Linux WiFi IoT Board (Crowdfunding)

July 20th, 2016 7 comments

Onion Omega board was first introduced in 2015. The tiny OpenWrt Linux board featured an Atheros AR9331 processor with GPIO headers, and various baseboards and add-ons. The company has now launched a Kickstarter campaign for the second versions – Omega2 & Omega2 Plus – with a faster processor @ 580 MHz, compatible with docks and add-ons boards used for Omega, and a much lower price with $5 for the Omega2, and $9 for Omega2 Plus with more storage and memory.

Omega vs Omega2 / Omega2 Plus Board

Omega vs Omega2

Omega2 & Omega2 Plus specifications:

  • WiSoC – 580 MHz processor, possibly Mediatek MT7688 MIPS processor used in LinkIt Smart 7688
  • System Memory
    • Omega2 – 64MB
    • Omega2 Plus – 128MB
  • Storage
    • Omage2 – 16MB flash
    • Omega 2 Plus – 32MB flash + micro SD slot
  • Connectivity
    • Built-in – 802.11 b/g/n WiFi with on-board and external antenna support
    • Via add-on boards – Bluetooth 4.0 LE, GPS, and 2G/3G
  • Expansion – 15x GPIO, 2x PWM, 2x UART, 1x I2C, 1x SPI, 1xI2S
  • Power Supply –
  • Dimensions – A fourth the size of the Raspberry Pi, and less than a third the size of the Arduino UNO
Omega2 with Dock and Arduino Shield

Omega2 with Dock and Arduino Shield

Although the module can be used own its own, it’s much easier and fun to use with docks with the Expansion dock, mini dock,  power dock, or Arduino dock shown above, and combined with one or more add-on boards adding relays, OLED displays, servo board, Ethernet, Bluetooth, GPS, or 2G/3G cellular connectivity. The developers also partnered with ControlEverything to provide for sensors add-ons.

Omega2_ProgrammingOmega2 runs Linux, likely OpenWrt, and can be programming with visual editor like Node-RED, as well as programming languages like C, C++, Node.js, Python, and php. You can checkout their github repositories to see what they’ve done for the original Omega board.

The campaign has reached its funding target within a few hours. Beside Omega2 and Omega2 Plus board, you may also consider get a bundle with a dock of your choice for $20 or $24, and various other kits are also offered as rewards. Please note that shipping is not included, and they’ll ask you to pay shipping later when the board is ready to ship with the price for the board only expected to be around $2 for most people, but it can be as high as $15 to some countries. Delivery is scheduled for November 2016.

Thanks to Freire & Nanik for the tip.

The Eclipse Foundation Releases Open Source Smart Home & IoT Gateway Frameworks, MQTT & oneM2M Implementations

June 17th, 2016 3 comments

The Eclipse Internet of Things (IoT) Working Group has released – or soon will be releasing – four open source projects for the Internet of Things with Eclipse SmartHome 0.8 framework, Eclipse Kura 2.0 IoT gateway framework, Eclipse Paho 1.2 MQTT & MQTT-SN clients, and Eclipse OM2M 1.0 implementation of oneM2M standard.

Eclipse_IoTEclipse SmartHome 0.8

Eclipse SmartHome is a framework for smart home solutions that runs on embedded devices, including Raspberry Pi, BeagleBone Black or Intel Edison development boards.

The latest SmartHome 0.8 release includes a new REST API and corresponding “Paper UI” administration interface, support for new devices including Sonos speakers, LIFX bulbs, Belkin WeMo devices, digitalSTROM systems, EnOcean devices (via a new OSGi EnOcean Base Driver) and others, as well as a new rule engine supporting templates for beginners, JavaScript for automation rules and graphical rule editors.

You can find more details on Eclipse SmartHome page, and/or download SmartHome 0.8, and optionally SmartHome Designer for Linux, Mac OS X, or Windows.

Eclipse Kura 2.0

Eclipse Kura is a framework for building IoT gateways with the latest Kura 2.0 release to bring a new responsive user interface (UI), support for multiple cloud connections to Eurotech Everyware Cloud, Amazon AWS IoT, Microsoft Azure IoT and IBM IoT Foundation, new tools and code samples to ease the creation of Kura applications, and tighter integration with Apache Camel.

Eclipse Kura 2.0 will be available later in June. You can find more details, including instructions to use it on BeagleBone Black and Raspberry Pi boards on Eclipse Kura page. Kura is also found on commercial M2M and IoT gateways such Eurotech ReliaGATE 15-10.

Eclipse Paho 1.2

Paho MQTT Clients Features Comparison (Click to Enlarge)

Paho MQTT Clients Features Comparison (Click to Enlarge)

Paho provides an open-source client implementations of the MQTT and MQTT-SN messaging protocols in Java, Python, JavaScript, C, .Net, Android and Embedded C/C++ client libraries. Paho 1.2 release adds automatic reconnect & offline buffering functionality for the C, Java and Android Clients, webSocket support for the Java and Python Clients, and a new Go Client for Windows, Mac OS X, Linux and FreeBSD.

Visit Eclipse Paho page for more details about the implementations and to download the latest 1.2 version.

Eclipse OM2M 1.0

Eclipse OM2M is an open source implementation of the oneM2M standard, and the version 1.0 includes the following features:

  • Modular platform architecture, based on OSGi making it highly extensible
  • Lightweight REST API exposed through multiple communication bindings including HTTP and CoAP protocols and supporting various content formats such as XML and JSON.
  • Flexible data storage based on an abstract persistence layer supporting embedded & server databases, in-memory mode, SQL & NoSQL models.
  • Implementation of  Dedicated Common Service Entity (CSE) for Infrastructure node (IN), Middle Node (MN), and Application Service Node (ASN), and Common Service Function (CSF) including: Registration, Application and Service Management, Discovery, Data Management and Repository, Subscription and Notification, Group Management, Security, etc.
oneM2M Functional Architecture with AE (Application Entity), CSE and NSE

oneM2M Functional Architecture with AE (Application Entity), CSE and NSE

Version 1.0 release will be available later this month, you can find out more on Eclipse OM2M page.

The foundation has also issued a proposal for Eclipse Kapua open source project aimed to create a modular integration platform for IoT devices and smart sensors.

You can also check out other open source IoT projects on Eclipse IoT microsite.