<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Weather Archives - Digital Urban</title>
	<atom:link href="https://www.digitalurban.org/blog/category/weather/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.digitalurban.org/blog/category/weather/</link>
	<description>Data, Cities, IoT, Writing, Music and Making Things</description>
	<lastBuildDate>Wed, 06 Aug 2025 08:42:15 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://www.digitalurban.org/wp-content/uploads/2012/07/Dulogosm-1.png</url>
	<title>Weather Archives - Digital Urban</title>
	<link>https://www.digitalurban.org/blog/category/weather/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Chasing the Tween: My 25-Year Obsession with Weather Data</title>
		<link>https://www.digitalurban.org/blog/2025/07/25/chasing-the-tween-my-25-year-obsession-with-weather-data/</link>
		
		<dc:creator><![CDATA[Andy]]></dc:creator>
		<pubDate>Fri, 25 Jul 2025 13:04:19 +0000</pubDate>
				<category><![CDATA[Weather]]></category>
		<category><![CDATA[Weather Display]]></category>
		<guid isPermaLink="false">https://www.digitalurban.org/blog/2025/07/25/chasing-the-tween-my-25-year-obsession-with-weather-data/</guid>

					<description><![CDATA[<p>From Adobe Flash through to Vibe Coding and back again to Physical Displays</p>
<p>The post <a href="https://www.digitalurban.org/blog/2025/07/25/chasing-the-tween-my-25-year-obsession-with-weather-data/">Chasing the Tween: My 25-Year Obsession with Weather Data</a> appeared first on <a href="https://www.digitalurban.org">Digital Urban</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">From Adobe Flash through to Vibe Coding and back again to Physical Displays</h2>



<p>For those of us who run a personal weather station (PWS), the obsession isn&#8217;t just about collecting data; it&#8217;s about seeing it and sharing it, and that often means an online data dashboard. At the Connected Environments Lab based within the Centre for Advanced Spatial Analysis, University College London, we have been running weather stations in Central London since the early 2000s, each one uploading and communicating data every 3 seconds &#8211; that&#8217;s approximately 268,918,537 measures of wind speed, air pressure, temperature, and solar intensity, amoungst others, including cloud height and now air quality etc. Getting the data online, however, has never been quite as easy as it should be…</p>



<h3 class="wp-block-heading">The Past: The Golden Age of Tweens and Live Dials</h3>



<p>So, back in the early 2000s, getting a Davis, Oregon Scientific, or La Crosse station online was a rite of passage for anyone interested in environmental data. The challenge wasn&#8217;t just mounting the hardware; it was wrestling with software to display the information. In this era, two names stood out for many hobbyists: Cumulus and Weather Display, and we have used them both extensively over the years.</p>



<p><strong>Weather Display</strong>, the long-standing creation of New Zealand-based developer Brian Hamilton, is a testament to the remarkable longevity of software. First appearing around 1999, it has been continuously developed for over two decades with hundreds of updates, making it a cornerstone of the personal weather station community. Its web component, <strong>Weather Display Live</strong>, became the golden standard for its time. Built entirely on Adobe Flash, it presented a fully featured dashboard of analogue-style gauges and tickers updating in real-time. The wind speed needle would smoothly tween with every gust, the rain gauge would visibly fill, and a ticker tape would scroll with the latest observations, creating a dynamic and immersive view of the weather that was unparalleled in its era. I’ve been chasing that smooth ‘tween’ ever since in dashboards, and indeed, further into this article that tween is still the ultimate draw in real-time data.</p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://www.digitalurban.org/wp-content/uploads/2025/08/6e0f7ac1-9c5c-4146-975e-6040b344b15e_555x414.gif" alt=""/></figure>



<p>By today&#8217;s standards, Weather Display Live perhaps looks cluttered, as design language shifts, indeed we are about to enter the era of ‘glass’ with the latest iOS updates and that will bring about a whole new look to apps and displays. Despite Adobe Flash requiring a browser plugin it allows dashboard that using the then HTML standard would simply not have been possible.</p>



<p>For a brief time Flash burned bright and was the basis of data on a little desktop device known as the Chumby &#8211; the Chumby was a device ahead of its time, providing realtime data updates via a series of rotating dashboards. As such it was the perfect device for displaying weather data, although the technical knowledge at the time, escaped me. Luckly a computer scientist, now <a href="https://profiles.ucl.ac.uk/4441-steven-gray">Professor Steven Gray</a> had recently joined our lab and kindly wrote a custom script to display the data.</p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://www.digitalurban.org/wp-content/uploads/2025/08/d52d9de1-6609-4b62-9a21-48e749430e74_400x294.jpeg" alt=""/></figure>



<p>However, Flash’s days were numbered when Steve Jobs famously called it a ‘bag of hurt’, ushering in a new age of HTML5 and laying the foundations to the web we see today.</p>



<p>Alongside Weather Display was <strong>Cumulus</strong> (now <strong>Cumulus MX</strong>), which carved out a huge following, particularly for Windows users. It was, and is, a robust piece of software for processing PWS data. Its approach to web display was more traditional. It used a system of web templates and tags. You could design a basic HTML page, insert special tags like <code>&lt;#temp&gt;</code>, and Cumulus would periodically process this file, replacing the tags with current data and uploading it to your web server. While it lacked the fluid dynamism of Flash, it was reliable and customisable if you knew your way around HTML and CSS. It represented, arguably the dawn of the template-driven, self-hosted dashboard. Adobe Flash dials were replaced with new plugin free gauges via a system known as Steel Gauges.</p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://www.digitalurban.org/wp-content/uploads/2025/08/47099276-d732-43e5-8f17-0765c9781acc_1146x1363.jpeg" alt=""/></figure>



<p>The Steel Gauges are a much-loved part of the Cumulus software legacy, while not part of the official template that came with the software, they were a hugely popular style that the Cumulus community created and shared, made possible by the software&#8217;s flexible templating system. They are the perfect example of a design philosophy called <strong>skeuomorphism</strong> &#8211; which came and went but is actually one we end this article on with perhaps the best example of a weather dashboard, but more on that later.</p>



<p>Skeuomorphism&#8217;s goal is to make digital items resemble their real-world counterparts. The Steel Gauges aesthetic was heavily influenced by the design trends of the late 2000s and early 2010s, aiming to make a web page look like a physical, high-end piece of hardware. The designs were rich with photorealistic detail: brushed metal or carbon fibre backgrounds, glistening chrome bezels with drop shadows, and precisely rendered needles and tick marks. The goal was to create a sense of tangible reality on the screen.</p>



<p>The implementation was a clever two-part process:</p>



<ol class="wp-block-list">
<li>
<p><strong>The Visuals:</strong> A user would first design the entire dashboard as a single, static background image in a graphics program like Photoshop. This image contained all the &#8220;steel&#8221; dials, gauges, and labels, but with no data.</p>
</li>



<li>
<p><strong>The Data:</strong> They would then use this image as a background in an HTML file. The magic happened by using Cumulus&#8217;s simple but powerful templating engine. Users would strategically place Cumulus&#8217;s special &#8220;web tags&#8221; (e.g., <code>&lt;#temp&gt;</code>, <code>&lt;#windspeed&gt;</code>, <code>&lt;#press&gt;</code>) over the blank areas on the gauges.</p>
</li>
</ol>



<p>When Cumulus processed this file, it would replace the tags with the live weather data. The software would then automatically upload the updated HTML file and the background image to the user&#8217;s web server.</p>



<p>Today, the Steel Gauges are perhaps a time capsule of a specific design era. They were built for a desktop-first world and were not responsive, often looking cluttered on mobile screens. As web design shifted towards minimalism, flat design, and mobile-first principles, the Steel Gauge aesthetic was largely superseded by clean, abstract, and data-dense interfaces like the Belchertown skin for WeeWX, which we come to next. However, they remain a nostalgic and important step in the evolution of personal weather data visualisation.</p>



<h3 class="wp-block-heading">The Current: Between Open and Closed Systems</h3>



<p>Standing down our Weather Display and Cumulus systems, we moved onto software known as WeeWX, running on a Raspberry Pi and sending data to a variety of online sources. It remains the system we use today. <strong>WeeWX</strong> (often stylised as weewx ) is a foundational piece of software in the modern personal weather station (PWS) world, but it&#8217;s fundamentally different from its predecessors. It is best understood not as a single application, but as an open-source software engine for collecting, processing, and displaying weather data.</p>



<p>It was created earlier than we at first thought &#8211; by Tom Keffer, with initial development beginning in the winter of 2008, with the first official release of WeeWX in 2009.</p>



<p>WeeWX is written entirely in Python and designed to run on Linux-based systems. This makes it the go-to choice for hobbyists who want to run their weather station on a low-power, single-board computer like a Raspberry Pi, operating 24/7 with minimal energy consumption, making it a notable move away from our previous power-hungry Windows machines.</p>



<p>The core philosophy is based around modularity and extensibility. It treats the different parts of managing a weather station as separate, interconnected components:</p>



<ol class="wp-block-list">
<li>
<p><strong>The Engine:</strong> At its heart, weewx runs a main loop that communicates directly with the weather station hardware. It polls the station every few seconds for live data (like wind speed) and stores this information in a database (typically SQLite by default, though others are supported).</p>
</li>



<li>
<p><strong>The Reporting Cycle:</strong> At a regular, user-defined interval (the &#8220;archive interval,&#8221; often every 5 minutes), the reporting engine wakes up. It pulls the latest data from the database and uses it to generate reports.</p>
</li>



<li>
<p><strong>Skins and Generators:</strong> This is where the user-facing magic happens. A &#8220;skin&#8221; in weewx is a complete template for a website, containing HTML files, CSS, images, and configuration settings. Using the powerful Cheetah templating engine, weewx fills these templates with data to generate static HTML pages. It can also run &#8220;generators&#8221; that push data to public services like Weather Underground, PWSWeather, and in our case custom MQTT brokers &#8211; this is key as it opens up the new world of Vibe Coding, which we come to next.</p>
</li>



<li>
<p><strong>Extensibility:</strong> The most powerful feature of weewx is its architecture, which is designed to be extended. Users can write their own services in Python to calculate new variables (e.g., custom fire danger indices), add new sensor types, or create entirely new report formats. This makes it a flexible platform for tinkerers and data enthusiasts.</p>
</li>
</ol>



<p>Out of the box, weewx comes with a simple, functional skin. However, its skinning architecture is has been key to community projects. The most used by far is the <strong>Belchertown skin</strong>, created by Pat O&#8217;Brien. First gaining widespread popularity around early 2019, Belchertown provides a clean, modern, mobile-responsive interface with dark mode, interactive charts, and real-time streaming updates via MQTT. It has become the de-facto &#8220;face&#8221; of weex for many users and perfectly embodies the modernist design principles of clarity and function.</p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://www.digitalurban.org/wp-content/uploads/2025/08/c2962b81-6ed6-4e7d-94f4-e1d967c6d90d_2078x1310.png" alt=""/></figure>



<p>At the polar opposite of weewx are the more propoietry systems that are run by the weather station hardware providers &#8211; Davis, being one key example with their live data system via Weatherlink.</p>



<p>Davis Instruments is a respected name in the personal weather station market, occupying the premium &#8220;prosumer&#8221; space. Based in California, the company is renowned for producing accurate, durable, and reliable hardware that is arguably considered a gold standard by serious hobbyists, educators, and agricultural professionals.</p>



<p>Their flagship products are the <strong>Vantage Pro2</strong> (their expandable, top-of-the-line model) and the <strong>Vantage Vue</strong> (a more compact, all-in-one unit). For decades, the main challenge for Davis owners was getting the rich data from this excellent hardware onto a computer and the internet &#8211; we have run their Vantage Pro line since the 2000’s and now use weewx &#8211; but they do have their own ‘out of the box’ system for people who do not want to tinker with a Raspberry Pi.</p>



<p>Originally, connecting a Davis station required a piece of hardware called the <strong>WeatherLink Data Logger</strong>. This was a small module that slotted into the back of the weather station console, attached via a serial or USB cable to a PC. To get data online 24/7, a user had to leave a computer running constantly with the WeatherLink PC software. The data logger itself was a one-time hardware purchase, costing around £150-£250 &#8211; our data logger used to plug into our Windows machine and Weather Display.</p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://www.digitalurban.org/wp-content/uploads/2025/08/e9477f3e-033f-4101-910c-e235f1689a95_832x802.png" alt=""/></figure>



<p>The modern solution is thankfully far more elegant. Davis replaced the data logger with their <strong>WeatherLink Live </strong>unit in 2019. This small, standalone box acted as an internet bridge. It independently listened for the radio signals from the outdoor sensors and sent the data directly to their WeatherLink Cloud. This was the first device to eliminate the need for a console to be connected to a computer &#8211; it basically took the computer out of the workflow.</p>



<p>This was superseded by the <strong>WeatherLink Console (model 6313)</strong> in early 2023, updating the previous and notably dated previous iteration.</p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://www.digitalurban.org/wp-content/uploads/2025/08/c9222c82-63e0-4ee7-9c73-3f9074cdac56_1378x1040.png" alt=""/></figure>



<p>Today, WeatherLink refers to the entire cloud-based ecosystem (<code>WeatherLink.com</code> and the mobile app). When you buy and connect a WeatherLink Live device, you get access to this platform. It allows you to view your data from anywhere, see historical charts, and share your station publicly.</p>



<p>The web-based dashboard is, however, slightly ‘clunky’ and arguably badly designed:</p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://www.digitalurban.org/wp-content/uploads/2025/08/10cac172-5be4-4dac-84e6-19e93c18ee95_2858x1250.png" alt=""/></figure>



<p>It also operates on a tiered subscription model, and to view your data in real-time, costs.</p>



<ol class="wp-block-list">
<li><p><strong>Basic Tier (Free):</strong> When you purchase your hardware (e.g., a Vantage Vue station + a WeatherLink Live device), you get the Basic tier for free. This includes:</p>
<ul class="wp-block-list">
<li>
<p>Your current, live data updated every minute.</p>
</li>



<li>
<p>A 24-hour chart of your data.</p>
</li>



<li>
<p>The ability to see your data on the app and website.</p>
</li>
</ul>
</li>



<li><p><strong>Pro Tier (Paid):</strong> This is the most common upgrade for enthusiasts. For a recurring fee, it unlocks much deeper access to your own data.</p>
<ul class="wp-block-list">
<li>
<p><strong>Cost:</strong> Approximately <strong>$3.95/month</strong> or <strong>$42.50/year</strong> (with prices subject to change and regional variation).</p>
</li>



<li><p><strong>Features:</strong></p>
<ul class="wp-block-list">
<li>
<p>Access to your full, detailed historical data archive.</p>
</li>



<li>
<p>Advanced, customisable charting tools to analyse your history.</p>
</li>



<li>
<p>More frequent &#8220;live&#8221; data updates on the web (every 2.5 seconds).</p>
</li>



<li>
<p>The ability to download your data archive as a CSV file.</p>
</li>
</ul>
</li>
</ul>
</li>
</ol>



<p>As such, we still have our Davis Vantage Pro plugged into a WeeWX system, which enables the transmission of data through an MQTT server and bypasses any paywalls to view our own data.</p>



<h3 class="wp-block-heading">Towards Personal Templates with Vibe Coding</h3>



<p>This would normally leave us with the Belchertown Skin, and while excellent, the itch to edit and innovate is always strong, and with it the desire to pull in increasingly customised data feeds, pulling in multiple sources of data to gain a better overview of the current environmental conditions. This would normally require a good understanding of data structures, application protocol interfaces, cascading style sheets, JavaScript and perhaps a bit of Firebase and databases. All of course are good to know and learn but if you want a new look to your data and only have a hour free then Vibe Coding is the current route to take. As in <a href="https://open.substack.com/pub/digitalurban/p/vibe-coding-from-ios-apps-to-an-asteroid?r=u7cv&amp;utm_campaign=post&amp;utm_medium=web&amp;showWelcomeOnShare=true">our previous substack post</a>, the term ‘Vibe Coding’ was defined Andrej Karpathy, a co-founder at OpenAI in Early 2025. The basic idea is to rely entirely on Large Language Models &#8211; LLMs &#8211; and code by using only natural language prompting, rather than writing the code yourself. At the moment we are exploring this new way to develop Weather Dashboards and are in the process of adding examples to our GitHub.</p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://www.digitalurban.org/wp-content/uploads/2025/08/97dbcfce-e0bd-45a3-9545-004e2794b0b8_2172x1434.png" alt=""/></figure>



<p>Our first example (see <a href="https://digitalurban.github.io/VibeWeatherDashboards/mixed_dashboard.html">https://digitalurban.github.io/VibeWeatherDashboards/mixed_dashboard.html</a>), pictured above, was created using Gemini 2.5 Pro, which is currently available for free for a month. The Pro version provides sufficient usage to create an unlimited number of dashboards. Vibe Coding is good &#8211; but it&#8217;s not that good, it won’t create the dashboard above in a single prompt, it takes a number of iterations, starting small and building up. It was built using the Canvas feature, which allows both a view of the code and a live preview, making it quick and easy to make changes. For example, our first prompt into Gemini was ‘make a 5-day forecast for ‘our area’ using a free weather api and use flat icons’. This created the 5-day forecast, using the Open-Meteo API, we subsequently pointed Gemini to our weewx data feed and asked it to use the same icon style to provide a dashboard using the key weather data indicators of Temperature, Wind, Rain, Pressure and Solar. Once that was working, with a few edits back and forth, we then added the coloured background, which changes colour according to the outside temperature, ranging from a dark blue for -10 °C through to a deep red for 35 degrees and above.</p>



<p>At the moment, we have it running on an old iPad, which we have mounted in a frame, sitting on a bookshelf in the corner of the room:</p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://www.digitalurban.org/wp-content/uploads/2025/08/d5d36992-40bc-4b19-bfc3-1e2f02bf3bb5_4032x3024.jpeg" alt=""/></figure>



<p>Vibe coding has also enabled us to explore the creation of AI Weather Landscape dashboards, which take the raw output of the UK Met Office forecast and send it to the Google Vertex AI platform to interpret it as an image of an English Landscape, twice a day.</p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://www.digitalurban.org/wp-content/uploads/2025/08/04e83eb9-9581-4337-85c1-34f6ea5b0c07_2878x1502.png" alt=""/></figure>



<p>Finally, Vibe Coding has allowed us to experiment with real-time graphing, something that harks back to Cumulus, as their templates integrated a series of graphs as part of a drop-down menu. Our graphing displays data in real-time over a period of 24 hours, allowing trends to be visualised and also the graphs to update as new data points come in.</p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://www.digitalurban.org/wp-content/uploads/2025/08/5ff88b88-0d27-49ea-8a91-e5ebb001582e_2526x1464.png" alt=""/></figure>



<p>The creation of a real-time graphing required the setting up of Firebase &#8211; something which is not overly self-explanatory. However, using Vibe Coding it only took an hour and a half from knowing little to nothing, to have a full system set up and running &#8211; it is all in the human language prompts and taking things in small steps. Our first prompt was ‘we have this data feed (insert mqtt feed link) and want to view it as a real-time graph, probably using Firebase, can you show us how to set it up and provide me with full code to view the data on a webpage’ &#8211; this was 6 months ago using ChatGPT, things move rapdily in this space and now there is <a href="https://firebase.google.com/docs/studio">Firebase Studio</a> which makes it even easier to get up and running.</p>



<p>Having been using and making weather dashboards in 25 years it is only in the last 6 months with the invention of Vibe Coding that innovation has speeded up. We have moved from clunky Windows PC looking interfaces through Flash, skeuomorphism, flat designs and now into hyper-customised dashboards using vibe computing. Yet there is one dashboard that I have kept looking at over the years and so far have been unable to replicate (mainly due to copyright issues, but also the code) &#8211; and that is an online version of the classic Intromet Climatica Weather System.</p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://www.digitalurban.org/wp-content/uploads/2025/08/0ad7a09e-94b3-4f51-80fb-4ca5b437fae1_2126x996.png" alt=""/></figure>



<p>It is perhaps the ultimate digital-analogue physical display, and one that is likely on every weather data enthusiast&#8217;s wish list. While the physical system remains out of reach for us, the developer over at <a href="https://weather.wilmslowastro.com/test/instromet/climatica/climatica.php">Wimslow Weather has made an online version</a> (hidden away under his developer section) and it is lovely:</p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://www.digitalurban.org/wp-content/uploads/2025/08/51199862-05f6-4d50-bc90-c07c3df461fc_2862x1354.png" alt=""/></figure>



<p>Sure, it&#8217;s full on skeuomorphism &#8211; but the tween on the wind direction and wind speed is one of the best we have seen &#8211; so despite having access to the new opportunities of AI, it&#8217;s a physical design from a small <a href="https://instromet.co.uk/climatica-weather-station/">British company, Instromet</a>, that somehow still remains the best, in our view.</p>



<p>We would love to know what dashboard you like or us, do tell us in the comments, and if you like this article, the subscribe link is of course below.</p>
<p>The post <a href="https://www.digitalurban.org/blog/2025/07/25/chasing-the-tween-my-25-year-obsession-with-weather-data/">Chasing the Tween: My 25-Year Obsession with Weather Data</a> appeared first on <a href="https://www.digitalurban.org">Digital Urban</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Enhancing Live Weather Monitoring with MQTT and Chart.js</title>
		<link>https://www.digitalurban.org/blog/2024/06/27/enhancing-live-weather-monitoring-with-mqtt-and-chart-js/</link>
		
		<dc:creator><![CDATA[Andy]]></dc:creator>
		<pubDate>Thu, 27 Jun 2024 15:10:06 +0000</pubDate>
				<category><![CDATA[data]]></category>
		<category><![CDATA[Data Visualisation]]></category>
		<category><![CDATA[Weather]]></category>
		<category><![CDATA[Weather (Live)]]></category>
		<category><![CDATA[Weather Display]]></category>
		<category><![CDATA[Data]]></category>
		<category><![CDATA[mqtt]]></category>
		<guid isPermaLink="false">https://www.digitalurban.org/?p=7816</guid>

					<description><![CDATA[<p>Introduction Viewing real-time data from a personal weather station such as a Davis Vantage Pro, a Tempest, or an EcoWhitt device can be complex. However, the majority of systems that...</p>
<p>The post <a href="https://www.digitalurban.org/blog/2024/06/27/enhancing-live-weather-monitoring-with-mqtt-and-chart-js/">Enhancing Live Weather Monitoring with MQTT and Chart.js</a> appeared first on <a href="https://www.digitalurban.org">Digital Urban</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2></h2>
<h3>Introduction</h3>
<p>Viewing real-time data from a personal weather station such as a Davis Vantage Pro, a Tempest, or an EcoWhitt device can be complex. However, the majority of systems that process weather data, such as Weather Display, Weewx, or CumlusMx, all have the ability to output MQTT data. This data can be used to display a real-time graph of the data, keeping you engaged with the latest weather updates, and supplemented with any other data which is MQTT-based.</p>
<p>With this in mind, we&#8217;ve developed a live weather monitoring dashboard as an illustrative example. This dashboard uses MQTT for real-time data updates and Chart.js for dynamic visualization. We&#8217;ve also included a visual indicator for connection status and a brief pulse effect to notify when new data arrives, enhancing the user experience.</p>
<p><img fetchpriority="high" decoding="async" class=" wp-image-7820 aligncenter" src="https://www.digitalurban.org/wp-content/uploads/2024/06/Screenshot-2024-06-27-at-15.48.35-300x185.png" alt="MQTT Weather Dashboard" width="600" height="370" srcset="https://www.digitalurban.org/wp-content/uploads/2024/06/Screenshot-2024-06-27-at-15.48.35-300x185.png 300w, https://www.digitalurban.org/wp-content/uploads/2024/06/Screenshot-2024-06-27-at-15.48.35-1024x631.png 1024w, https://www.digitalurban.org/wp-content/uploads/2024/06/Screenshot-2024-06-27-at-15.48.35-768x473.png 768w, https://www.digitalurban.org/wp-content/uploads/2024/06/Screenshot-2024-06-27-at-15.48.35-1536x946.png 1536w, https://www.digitalurban.org/wp-content/uploads/2024/06/Screenshot-2024-06-27-at-15.48.35-2048x1261.png 2048w" sizes="(max-width: 600px) 100vw, 600px" /></p>
<p>You can view it live at: <a href="https://finchamweather.co.uk/weathergraph.htm">https://finchamweather.co.uk/weathergraph.htm</a></p>
<p>The data populates as the page loads &#8211; we could of course back load it via a database link, but the aim was to simply use MQTT and have a graphing system that streams in data, its a work in progress but here is how we got it working:</p>
<h3>Setting Up the Environment</h3>
<p>Before we dive into the code, ensure you have the following libraries included in your HTML:</p>
<ul>
<li>Paho MQTT: for MQTT protocol handling &#8211; our MQTT feed is open to use as a test, replace this with your own MQTT details in the main code.</li>
<li>Chart.js: for creating dynamic charts</li>
<li>Chart.js adapter for date-fns: for handling time scales in charts</li>
</ul>
<h3>Initial HTML Setup</h3>
<p>We&#8217;ll start by setting up the basic HTML structure. This includes elements for displaying the connection status, forecast, weather statistics, and the weather chart.</p>
<pre><code>&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
    &lt;meta name="apple-mobile-web-app-capable" content="yes"&gt;
    &lt;meta name="apple-mobile-web-app-status-bar-style" content="black"&gt;
    &lt;title&gt;Live Weather Graph&lt;/title&gt;
    &lt;script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.js"&gt;&lt;/script&gt;
    &lt;script src="https://cdn.jsdelivr.net/npm/chart.js"&gt;&lt;/script&gt;
    &lt;script src="https://cdn.jsdelivr.net/npm/chartjs-adapter-date-fns"&gt;&lt;/script&gt;
    &lt;style&gt;
        body {
            font-family: Arial, sans-serif;
            margin: 20px;
        }
        #mqttStatus {
            margin-bottom: 20px;
            text-align: left;
            font-size: 1.2em;
        }
        .dot {
            height: 20px;
            width: 20px;
            border-radius: 50%;
            display: inline-block;
        }
        .green {
            background-color: green;
        }
        .red {
            background-color: red;
        }
        .orange {
            background-color: orange;
        }
        .pulse-once {
            animation: pulse-once 1s;
        }
        @keyframes pulse-once {
            0% { transform: scale(1); }
            50% { transform: scale(1.2); }
            100% { transform: scale(1); }
        }
        #forecast {
            margin-bottom: 20px;
            text-align: left;
            font-size: 1.2em;
            font-weight: bold;
        }
        #stats {
            display: flex;
            justify-content: center;
            gap: 20px;
            margin-bottom: 20px;
            font-size: 1.2em;
            font-weight: bold;
        }
        #stats div {
            padding: 10px 20px;
            border: 1px solid #ccc;
            border-radius: 8px;
            box-shadow: 2px 2px 12px #aaa;
            background-color: #f9f9f9;
        }
        canvas {
            border: 1px solid #ccc;
            box-shadow: 2px 2px 12px #aaa;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div id="mqttStatus"&gt;&lt;span id="connectionDot" class="dot red"&gt;&lt;/span&gt; mqtt: disconnected&lt;/div&gt;
    &lt;div id="forecast"&gt;Forecast: Loading...&lt;/div&gt;
    &lt;div id="stats"&gt;
        &lt;div id="maxWindSpeed"&gt;Max Wind Speed: 0 mph&lt;/div&gt;
        &lt;div id="maxTemp"&gt;Max Temperature: 0 °C&lt;/div&gt;
        &lt;div id="minTemp"&gt;Min Temperature: 0 °C&lt;/div&gt;
        &lt;div id="maxPressure"&gt;Max Pressure: 0 mbar&lt;/div&gt;
        &lt;div id="minPressure"&gt;Min Pressure: 0 mbar&lt;/div&gt;
    &lt;/div&gt;
    &lt;canvas id="weatherChart" width="800" height="400"&gt;&lt;/canvas&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>
<h3>Connecting to MQTT</h3>
<p>Next, we set up the MQTT connection. The MQTT client will connect to the broker, subscribe to the necessary topics, and handle messages when they arrive.</p>
<pre><code>// MQTT connection settings
var mqtt;
var reconnectTimeout = 2000;
var host = "mqtt.cetools.org";
var port = location.protocol === 'https:' ? 8081 : 8080;
var options = {
    timeout: 3,
    onSuccess: onConnect,
    onFailure: onFailure,
    useSSL: location.protocol === 'https:',
};
var clientID = "clientID" + parseInt(Math.random() * 100);

function updateConnectionStatus(status) {
    const dot = document.getElementById("connectionDot");
    if (status === "connected") {
        dot.className = "dot green";
        document.getElementById("mqttStatus").innerHTML = `&lt;span class="dot green" id="connectionDot"&gt;&lt;/span&gt; mqtt: connected`;
    } else if (status === "disconnected") {
        dot.className = "dot red";
        document.getElementById("mqttStatus").innerHTML = `&lt;span class="dot red" id="connectionDot"&gt;&lt;/span&gt; mqtt: disconnected`;
    } else if (status === "reconnecting") {
        dot.className = "dot orange";
        document.getElementById("mqttStatus").innerHTML = `&lt;span class="dot orange" id="connectionDot"&gt;&lt;/span&gt; mqtt: reconnecting`;
    }
}

function pulseDot() {
    const dot = document.getElementById("connectionDot");
    dot.classList.add("pulse-once");
    setTimeout(() =&gt; {
        dot.classList.remove("pulse-once");
    }, 1000); // Duration of the pulse-once animation
}

function onFailure(message) {
    console.log("Connection Attempt to Host " + host + " Failed: ", message.errorMessage);
    updateConnectionStatus("disconnected");
    setTimeout(MQTTconnect, reconnectTimeout);
}

function onConnect() {
    console.log("Connected ");
    updateConnectionStatus("connected");
    mqtt.subscribe("personal/ucfnaps/downhamweather/loop");
    mqtt.subscribe("personal/ucfnaps/eink/met");
}

function MQTTconnect() {
    console.log("Connecting to " + host + " on port " + port);
    updateConnectionStatus("reconnecting");
    mqtt = new Paho.MQTT.Client(host, port, clientID);
    mqtt.onMessageArrived = onMessageArrived;
    mqtt.onConnectionLost = function(responseObject) {
        if (responseObject.errorCode !== 0) {
            console.log("Connection Lost: " + responseObject.errorMessage);
            updateConnectionStatus("disconnected");
            setTimeout(MQTTconnect, reconnectTimeout);  // Attempt to reconnect
        }
    };
    mqtt.connect(options);
}

window.onload = function() {
    MQTTconnect();
}
</code></pre>
<h3>Handling Incoming Messages</h3>
<p>When messages arrive, we process the data and update the chart. We also update the connection dot to pulse briefly, indicating new data has been received.</p>
<pre><code>let lastUpdate = Date.now();  // Initialize to current time
let firstUpdate = true;  // Flag to ensure first update happens immediately

let maxWindSpeed = 0;
let maxTemp = -Infinity;
let minTemp = Infinity;
let maxPressure = -Infinity;
let minPressure = Infinity;

function updateWindSpeed(windSpeed, timestamp) {
    weatherChart.data .labels.push(timestamp);
    weatherChart.data.datasets[0].data.push(windSpeed);

    // Update max wind speed
    if (windSpeed &gt; maxWindSpeed) {
        maxWindSpeed = windSpeed;
        document.getElementById('maxWindSpeed').innerText = `Max Wind Speed: ${maxWindSpeed} mph`;
    }

    // Limit the number of data points to keep the chart responsive
    if (weatherChart.data.labels.length &gt; 1440) { // Assuming 1 data point per minute, keep 24 hours of data
        weatherChart.data.labels.shift();
        weatherChart.data.datasets[0].data.shift();
    }

    weatherChart.update();
}

function updateOtherMetrics(temperature, solarRadiation, rainAmount, pressure, timestamp) {
    weatherChart.data.datasets[1].data.push({x: timestamp, y: temperature});
    weatherChart.data.datasets[2].data.push({x: timestamp, y: solarRadiation});
    weatherChart.data.datasets[3].data.push({x: timestamp, y: rainAmount &gt; 0 ? rainAmount : null});
    weatherChart.data.datasets[4].data.push({x: timestamp, y: pressure});

    // Update max and min temperature
    if (temperature &gt; maxTemp) {
        maxTemp = temperature;
        document.getElementById('maxTemp').innerText = `Max Temperature: ${maxTemp} °C`;
    }
    if (temperature &lt; minTemp) { minTemp = temperature; document.getElementById('minTemp').innerText = `Min Temperature: ${minTemp} °C`; } // Update max and min pressure if (pressure &gt; maxPressure) {
        maxPressure = pressure;
        document.getElementById('maxPressure').innerText = `Max Pressure: ${maxPressure} mbar`;
    }
    if (pressure &lt; minPressure) { minPressure = pressure; document.getElementById('minPressure').innerText = `Min Pressure: ${minPressure} mbar`; } // Limit the number of data points to keep the chart responsive if (weatherChart.data.labels.length &gt; 1440) { // Assuming 1 data point per minute, keep 24 hours of data
        weatherChart.data.datasets[1].data.shift();
        weatherChart.data.datasets[2].data.shift();
        weatherChart.data.datasets[3].data.shift();
        weatherChart.data.datasets[4].data.shift();
    }

    weatherChart.update();
}

function updateForecast(forecast) {
    document.getElementById('forecast').innerText = `Forecast: ${forecast}`;
}

function onMessageArrived(message) {
    console.log("Message Arrived: " + message.destinationName + " : " + message.payloadString);
    if (message.destinationName === "personal/ucfnaps/downhamweather/loop") {
        const data = JSON.parse(message.payloadString);
        const windSpeed = data['windSpeed_mph'];  // Adjust this key according to your data structure
        const temperature = data['outTemp_C'];  // Adjust this key according to your data structure
        const solarRadiation = data['radiation_Wpm2'];  // Adjust this key according to your data structure
        const rainAmount = data['dayRain_mm'];  // Adjust this key according to your data structure
        const pressure = data['pressure_mbar'];  // Adjust this key according to your data structure

        const nowTimestamp = new Date();

        // Update wind speed every time
        updateWindSpeed(windSpeed, nowTimestamp);

        if (firstUpdate || Date.now() - lastUpdate &gt;= 60000) {
            // Update other metrics every minute
            updateOtherMetrics(temperature, solarRadiation, rainAmount, pressure, nowTimestamp);
            lastUpdate = Date.now();
            firstUpdate = false;  // Ensure subsequent updates follow the interval
        }

        // Pulse the dot when new data arrives
        pulseDot();
    } else if (message.destinationName === "personal/ucfnaps/eink/met") {
        const forecast = message.payloadString;
        updateForecast(forecast);
    }
}
</code></pre>
<h3>Chart.js Setup</h3>
<p>Now, let&#8217;s configure Chart.js to visualize the weather data. We will use multiple datasets to display wind speed, temperature, solar radiation, rain amount, and pressure.</p>
<pre><code>// Chart.js setup
const ctx = document.getElementById('weatherChart').getContext('2d');
const weatherChart = new Chart(ctx, {
    type: 'line',
    data: {
        labels: [],  // Time labels
        datasets: [{
            label: 'Wind Speed (mph)',
            data: [],
            borderColor: 'rgba(75, 192, 192, 1)',
            borderWidth: 3,
            fill: false,
            yAxisID: 'y-axis-1',
            tension: 0.1
        },
        {
            label: 'Temperature (°C)',
            data: [],
            borderColor: 'rgba(255, 99, 132, 1)',
            borderWidth: 3,
            fill: false,
            yAxisID: 'y-axis-2',
            tension: 0.1
        },
        {
            label: 'Solar Radiation (W/m²)',
            data: [],
            borderColor: 'rgba(255, 206, 86, 1)',
            borderWidth: 3,
            fill: false,
            yAxisID: 'y-axis-3',
            tension: 0.1
        },
        {
            label: 'Rain Amount (mm)',
            data: [],
            borderColor: 'rgba(54, 162, 235, 1)',
            borderWidth: 3,
            fill: false,
            yAxisID: 'y-axis-4',
            tension: 0.1
        },
        {
            label: 'Pressure (mbar)',
            data: [],
            borderColor: 'rgba(153, 102, 255, 1)',
            borderWidth: 3,
            fill: false,
            yAxisID: 'y-axis-5',
            tension: 0.1
        }]
    },
    options: {
        responsive: true,
        plugins: {
            legend: {
                position: 'top',
            },
            title: {
                display: true,
                text: 'Live Weather Data'
            },
            decimation: {
                enabled: true,
                algorithm: 'lttb',
                samples: 100,  // Adjust this value as needed for performance
            },
        },
        scales: {
            x: {
                type: 'time',
                time: {
                    unit: 'minute'
                },
                title: {
                    display: true,
                    text: 'Time'
                }
            },
            'y-axis-1': {
                type: 'linear',
                position: 'left',
                beginAtZero: true,
                title: {
                    display: true,
                    text: 'Wind Speed (mph)'
                }
            },
            'y-axis-2': {
                type: 'linear',
                position: 'right',
                beginAtZero: true,
                title: {
                    display: true,
                    text: 'Temperature (°C)'
                },
                grid: {
                    drawOnChartArea: false
                }
            },
            'y-axis-3': {
                type: 'linear',
                position: 'right',
                beginAtZero: true,
                title: {
                    display: true,
                    text: 'Solar Radiation (W/m²)'
                },
                grid: {
                    drawOnChartArea: false
                }
            },
            'y-axis-4': {
                type: 'linear',
                position: 'right',
                beginAtZero: true,
                title: {
                    display: true,
                    text: 'Rain Amount (mm)'
                },
                grid: {
                    drawOnChartArea: false
                }
            },
            'y-axis-5': {
                type: 'linear',
                position: 'right',
                beginAtZero: true,
                title: {
                    display: true,
                    text: 'Pressure (mbar)'
                },
                grid: {
                    drawOnChartArea: false
                }
            }
        },
        interaction: {
            intersect: false,
            mode: 'nearest',
        },
        elements: {
            line: {
                cubicInterpolationMode: 'monotone',
            },
        },
    }
});
</code></pre>
<h3>Conclusion</h3>
<p>By integrating MQTT and Chart.js, it is possible to create a dynamic and real-time weather monitoring dashboard. The connection status indicator provides immediate feedback on the connection state, and the pulsing effect when new data arrives enhances user experience by visually notifying them of updates.</p>
<p>This setup can be further extended by adding more datasets, customizing the chart&#8217;s appearance, or integrating additional sensors. The data of course couple be from any feed, but real-time weather monitoring provides a good example of how IoT and web technologies can be combined to create realtime dashboards.</p>
<p>The post <a href="https://www.digitalurban.org/blog/2024/06/27/enhancing-live-weather-monitoring-with-mqtt-and-chart-js/">Enhancing Live Weather Monitoring with MQTT and Chart.js</a> appeared first on <a href="https://www.digitalurban.org">Digital Urban</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Creating Art Like Weather Forecast Images with DALL·E 3 and API Data</title>
		<link>https://www.digitalurban.org/blog/2024/04/27/creating-art-like-weather-forecast-images-with-dall%c2%b7e-3-and-api-data/</link>
		
		<dc:creator><![CDATA[Andy]]></dc:creator>
		<pubDate>Sat, 27 Apr 2024 14:12:43 +0000</pubDate>
				<category><![CDATA[Art]]></category>
		<category><![CDATA[Making]]></category>
		<category><![CDATA[Weather]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Dall-E]]></category>
		<category><![CDATA[FrameTV]]></category>
		<category><![CDATA[MetOffice]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://connected-environments.org/?p=7565</guid>

					<description><![CDATA[<p>The post <a href="https://www.digitalurban.org/blog/2024/04/27/creating-art-like-weather-forecast-images-with-dall%c2%b7e-3-and-api-data/">Creating Art Like Weather Forecast Images with DALL·E 3 and API Data</a> appeared first on <a href="https://www.digitalurban.org">Digital Urban</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div id="fws_6970f8de0f5a3"  data-column-margin="default" data-midnight="dark"  class="wpb_row vc_row-fluid vc_row top-level"  style="padding-top: 0px; padding-bottom: 0px; "><div class="row-bg-wrap" data-bg-animation="none" data-bg-animation-delay="" data-bg-overlay="false"><div class="inner-wrap row-bg-layer" ><div class="row-bg viewport-desktop"  style=""></div></div></div><div class="row_col_wrap_12 col span_12 dark left">
	<div  class="vc_col-sm-12 wpb_column column_container vc_column_container col no-extra-padding inherit_tablet inherit_phone "  data-padding-pos="all" data-has-bg-color="false" data-bg-color="" data-bg-opacity="1" data-animation="" data-delay="0" >
		<div class="vc_column-inner" >
			<div class="wpb_wrapper">
				
<div class="wpb_text_column wpb_content_element " >
	<div class="wpb_wrapper">
		<h2>Introduction</h2>
<p>The Met Office, as the national meteorological service for the United Kingdom, provides valuable weather data through its API called DataPoint. This API caters to a wide range of users, including professionals, scientists, students, and amateur developers. One of its notable features is the availability of text-based regional weather forecasts.</p>
<p>However, traditional text-to-image systems often struggle with accurately representing descriptive language. Users often find themselves navigating the complexities of prompt engineering to achieve their desired visual output. However, things are rapidly chaning with the use of AI and OpenAI’s latest release, DALL·E 3, simplifies this process by generating images that align with the provided text.</p>
<p>In this blog post, we’ll explore how to combine Met Office weather forecasts with DALL·E 3 via its API using Python. Our goal? To create captivating landscape imagery that reflects the weather conditions described in the forecast. Our images are then uploaded to our webserver, using FTP for viewing online. If you simply want to create an image, then you can leave the FTP section out.</p>
<h2>The Workflow</h2>
<ol>
<li><strong>Met Office Data Retrieval</strong>:
<ul>
<li>We fetch the weather forecast data from the Met Office DataPoint API. Specifically, we focus on today’s weather conditions. We are using the UK metoffice, but it could be any weather api, from any country, that returns forecast text.</li>
</ul>
</li>
<li><strong>Creating the Image Prompt</strong>:
<ul>
<li>We construct an image prompt that encapsulates the essence of the weather. Our prompt includes the landscape type (e.g., “rural Norfolk landscape”) and the specific weather details obtained from the Met Office. The landscape type can be edited accordingly</li>
</ul>
</li>
<li><strong>DALL·E 3 Image Generation</strong>:
<ul>
<li>Leveraging OpenAI’s DALL·E 3 model, we generate an image based on the provided prompt. The image should realistically depict cloud formations, sunlight, precipitation, and wind effects, all while capturing the mood suggested by the weather.</li>
</ul>
</li>
<li><strong>FTP Upload</strong>:
<ul>
<li>Finally, we upload the generated image to an FTP server for public access.</li>
</ul>
</li>
</ol>
<p>We run the script every 12 hours (ours runs on a Raspberry Pi) with the images archived on the websever &#8211; the gallery below shows some of the images from the last few months:</p>
	</div>
</div>




	<div class="wpb_gallery wpb_content_element clearfix">
		<div class="wpb_wrapper"><div class="wpb_gallery_slidesnectarslider_style" data-onclick="link_no" data-interval="5"><div class="nectar-slider-wrap" style="height: 720px" data-flexible-height="" data-overall_style="classic" data-button-styling="btn_with_count" data-fullscreen="false"  data-full-width="false" data-parallax="false"  id="ns-id-6970f8de157af"><div class="swiper-container" style="height: 720px"  data-loop="true" data-height="720" data-bullets="" data-bullet_style="see_through" data-arrows="true" data-desktop-swipe="true" data-settings=""><div class="swiper-wrapper"><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240122120033.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240121120026.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240120120024.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240119120029.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240118120029.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240113120022.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240113180024.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240114060028.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240114120027.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240114180024.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240115060035.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240115120029.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240116120025.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240117120024.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240113060024.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240112180032.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240112120026.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240112060026.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240111180025.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240111120029.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240111060031.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240110180025.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240110120034.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240110060030.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240109180026.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240109120029.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240109060027.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240108180023.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2024/05/image.jpeg_20240108120024.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--><div class="swiper-slide" data-bg-alignment="center" data-color-scheme="light" data-x-pos="centered" data-y-pos="middle"><div class="image-bg" style="background-image: url(https://www.digitalurban.org/wp-content/uploads/2023/12/image.jpeg_20231216122052.jpeg);">  &nbsp; </div><span class="ie-fix"></span> </div><!--/swiper-slide--></div><a href="" class="slider-prev"><i class="icon-salient-left-arrow"></i> <div class="slide-count"> <span class="slide-current">1</span> <i class="icon-salient-right-line"></i> <span class="slide-total"></span> </div> </a>
			     		<a href="" class="slider-next"><i class="icon-salient-right-arrow"></i> <div class="slide-count"> <span class="slide-current">1</span> <i class="icon-salient-right-line"></i> <span class="slide-total"></span> </div> </a><div class="nectar-slider-loading"></div></div></div></div>
		</div> 
	</div> 
<div class="wpb_text_column wpb_content_element " >
	<div class="wpb_wrapper">
		<p>The full code can be seen below, with the latest version available via our GitHub repository.</p>
	</div>
</div>




<div class="wpb_text_column wpb_content_element " >
	<div class="wpb_wrapper">
		<pre class="EnlighterJSRAW" data-enlighter-language="generic"># Import necessary libraries
import ftplib
import requests
from PIL import Image
import io
from bs4 import BeautifulSoup
from datetime import datetime

# Get Met Office Data and Strip Today/Tonight Text
url = 'http://datapoint.metoffice.gov.uk/public/data/txt/wxfcs/regionalforecast/xml/512?key=YOURMETOFFICEAPIKEY'
document = requests.get(url)
soup = BeautifulSoup(document.content, "lxml-xml")

# Extract today's weather forecast
todayraw = soup.find_all("Paragraph", attrs={'title': 'Today:'})
todaystr = str(todayraw)
today = (todaystr.replace('[&lt;Paragraph title="Today:"&gt;', '').replace('&lt;/Paragraph&gt;', '').replace(']', ''))

# Set up OpenAI API key
from openai import OpenAI
client = OpenAI(api_key='YourOpenAIAPIKey')

# FTP server details
ftp_server = 'YourFTPServer'
ftp_username = 'FTPUserName'
ftp_password = 'FTPPassword'

# Specify the type of Norfolk landscape (e.g., rural, coastal, urban)
landscape_type = "rural Norfolk landscape"  # Change this as per your preference

# Create the image prompt
image_prompt = (
    f"A photorealistic single, cohesive scene image of a {landscape_type}, showcasing the following weather conditions: {today}. "
    "The image should realistically depict elements like cloud formations, sunlight or lack thereof, any precipitation, and wind effects. "
    "It should convey the atmosphere and mood suggested by the weather, with appropriate lighting and color tones. No numerical data or text should be included, just a pure visual representation of the weather in the landscape."
)

# Generate an image using OpenAI's DALL·E
def generate_image(prompt):
    response = client.images.generate(prompt=prompt, n=1, model="dall-e-3", quality="standard", style="vivid", size="1792x1024")
    image_url = response.data[0].url
    return image_url

# Function to generate a datestamp
def get_datestamp():
    return datetime.now().strftime("%Y%m%d%H%M%S")

# Modified FTP upload function
def upload_to_ftp(image_url, remote_path):
    with ftplib.FTP(ftp_server) as ftp:
        ftp.login(user=ftp_username, passwd=ftp_password)
        response = requests.get(image_url)
        image = Image.open(io.BytesIO(response.content))
        datestamp = get_datestamp()
        original_image = io.BytesIO()
        image.save(original_image, format='JPEG')
        original_image.seek(0)
        ftp.storbinary(f'STOR {remote_path}_{datestamp}.jpeg', original_image)
        resized_image = image.resize((1792, 1024))
        jpeg_image = io.BytesIO()
        resized_image.save(jpeg_image, format='JPEG')
        jpeg_image.seek(0)
        ftp.storbinary('STOR public_html/image.jpeg', jpeg_image)
        resized_image = image.resize((800, 480))
        jpeg_image = io.BytesIO()
        resized_image.save(jpeg_image, format='JPEG')
        jpeg_image.seek(0)
        ftp.storbinary('STOR public_html/image_eink.jpeg', jpeg_image)

# Generate the image and upload it
image_url = generate_image(image_prompt)
upload_to_ftp(image_url, 'public_html/image.jpeg')
</pre>
	</div>
</div>




			</div> 
		</div>
	</div> 
</div></div>
		<div id="fws_6970f8de6a063"  data-column-margin="default" data-midnight="dark"  class="wpb_row vc_row-fluid vc_row"  style="padding-top: 0px; padding-bottom: 0px; "><div class="row-bg-wrap" data-bg-animation="none" data-bg-animation-delay="" data-bg-overlay="false"><div class="inner-wrap row-bg-layer" ><div class="row-bg viewport-desktop"  style=""></div></div></div><div class="row_col_wrap_12 col span_12 dark left">
	<div  class="vc_col-sm-12 wpb_column column_container vc_column_container col no-extra-padding inherit_tablet inherit_phone "  data-padding-pos="all" data-has-bg-color="false" data-bg-color="" data-bg-opacity="1" data-animation="" data-delay="0" >
		<div class="vc_column-inner" >
			<div class="wpb_wrapper">
				
<div class="wpb_text_column wpb_content_element " >
	<div class="wpb_wrapper">
		<h3>Breaking down the steps in the code &#8211;</h3>
<ol>
<li><strong>Importing Libraries</strong>: We start by importing necessary Python libraries for HTTP requests, image processing, FTP interaction, and data parsing.</li>
<li><strong>Fetching Weather Data</strong>: The script retrieves weather data from the Met Office using an API key. It extracts relevant information using BeautifulSoup and cleans up the output to get the weather forecast for today.</li>
<li><strong>OpenAI API Key</strong>: The OpenAI API key is set up to use the DALL·E model for image generation.</li>
<li><strong>FTP Server Details</strong>: FTP server credentials (server address, username, and password) are provided for image uploads.</li>
<li><strong>Weather Details and Landscape Type</strong>: The weather description obtained earlier is stored in weather_details . A landscape type (e.g., “rural Norfolk landscape”) is specified.</li>
<li><strong>Image Prompt Creation</strong>: The image_prompt  is constructed by combining weather details and landscape type. It describes the desired image.</li>
<li><strong>Image Generation with DALL·E</strong>: The  generatrate_image function uses DALL·E to create and return an image based on the prompt.</li>
<li><strong>Datestamp Generation</strong>: A datestamp is generated for archiving purposes.</li>
<li><strong>FTP Image Upload</strong>: The upload_to_ftp function connects to the FTP server, downloads the generated image, and uploads it to specific directories &#8211; this is optional, only of use if you are hosting your images.</li>
<li><strong>Running the Script</strong>: We run the script every 12 hours, using a cron job on a Raspberry Pi. We additional send it to our iPhone and our FrameTV, so the latest image is viewable either as a widget or on screen</li>
</ol>
<p>Finally we also display it on our iPad, using the <a href="https://frame-it.framer.website/">FrameIT app</a> &#8211; this auto updates the image when a new one is uploaded to the web server.</p>
<p>&nbsp;</p>
<div id="attachment_7782" style="width: 1034px" class="wp-caption aligncenter"><img decoding="async" aria-describedby="caption-attachment-7782" class="wp-image-7782 size-large" src="https://www.digitalurban.org/wp-content/uploads/2024/04/Photoroom_20240326_132608-e1714226219256-1024x732.jpg" alt="Dall-E 3 image on an iPad using Frame-IT" width="1024" height="732" srcset="https://www.digitalurban.org/wp-content/uploads/2024/04/Photoroom_20240326_132608-e1714226219256-1024x732.jpg 1024w, https://www.digitalurban.org/wp-content/uploads/2024/04/Photoroom_20240326_132608-e1714226219256-300x214.jpg 300w, https://www.digitalurban.org/wp-content/uploads/2024/04/Photoroom_20240326_132608-e1714226219256-768x549.jpg 768w, https://www.digitalurban.org/wp-content/uploads/2024/04/Photoroom_20240326_132608-e1714226219256.jpg 1280w" sizes="(max-width: 1024px) 100vw, 1024px" /><p id="caption-attachment-7782" class="wp-caption-text">Dall-E 3 image on an iPad using Frame-IT</p></div>
<p>Do let us know if you create you own AI based weather images using data inputs &#8211; it would be interesting to see how different landscapes and counties compare.</p>
	</div>
</div>




			</div> 
		</div>
	</div> 
</div></div>
<p>The post <a href="https://www.digitalurban.org/blog/2024/04/27/creating-art-like-weather-forecast-images-with-dall%c2%b7e-3-and-api-data/">Creating Art Like Weather Forecast Images with DALL·E 3 and API Data</a> appeared first on <a href="https://www.digitalurban.org">Digital Urban</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Reimaging the Traditional Weather House with Open Data, Laser Cutting and 3D Printing</title>
		<link>https://www.digitalurban.org/blog/2023/08/18/reimaging-the-traditional-weather-house-with-open-data-laser-cutting-and-3d-printing/</link>
		
		<dc:creator><![CDATA[Andy]]></dc:creator>
		<pubDate>Fri, 18 Aug 2023 13:36:46 +0000</pubDate>
				<category><![CDATA[Making]]></category>
		<category><![CDATA[Weather]]></category>
		<category><![CDATA[Black Forest]]></category>
		<category><![CDATA[Open Weather Map]]></category>
		<category><![CDATA[Pi Pico]]></category>
		<category><![CDATA[Weather House]]></category>
		<guid isPermaLink="false">https://www.digitalurban.org/?p=7179</guid>

					<description><![CDATA[<p>The post <a href="https://www.digitalurban.org/blog/2023/08/18/reimaging-the-traditional-weather-house-with-open-data-laser-cutting-and-3d-printing/">Reimaging the Traditional Weather House with Open Data, Laser Cutting and 3D Printing</a> appeared first on <a href="https://www.digitalurban.org">Digital Urban</a>.</p>
]]></description>
										<content:encoded><![CDATA[
		<div id="fws_6970f8de700d5"  data-column-margin="default" data-midnight="dark"  class="wpb_row vc_row-fluid vc_row"  style="padding-top: 0px; padding-bottom: 0px; "><div class="row-bg-wrap" data-bg-animation="none" data-bg-animation-delay="" data-bg-overlay="false"><div class="inner-wrap row-bg-layer" ><div class="row-bg viewport-desktop"  style=""></div></div></div><div class="row_col_wrap_12 col span_12 dark left">
	<div  class="vc_col-sm-12 wpb_column column_container vc_column_container col no-extra-padding inherit_tablet inherit_phone "  data-padding-pos="all" data-has-bg-color="false" data-bg-color="" data-bg-opacity="1" data-animation="" data-delay="0" >
		<div class="vc_column-inner" >
			<div class="wpb_wrapper">
				
<div class="wpb_text_column wpb_content_element " >
	<div class="wpb_wrapper">
		<p>Traditional German weather houses are small, decorative structures that are popular in Germany and other parts of Europe. They are often made from wood and used to predict the weather.</p>
<div class="wp-block-image">
<figure class="alignright size-large is-resized">
<div id="attachment_7297" style="width: 310px" class="wp-caption alignnone"><img decoding="async" aria-describedby="caption-attachment-7297" class="wp-image-7297 size-medium" style="width: 246px; height: 159px;" src="https://www.digitalurban.org/wp-content/uploads/2023/08/Screenshot-2023-08-18-at-14.30.17-300x267.png" alt="Weather House" width="300" height="267" srcset="https://www.digitalurban.org/wp-content/uploads/2023/08/Screenshot-2023-08-18-at-14.30.17-300x267.png 300w, https://www.digitalurban.org/wp-content/uploads/2023/08/Screenshot-2023-08-18-at-14.30.17-768x684.png 768w, https://www.digitalurban.org/wp-content/uploads/2023/08/Screenshot-2023-08-18-at-14.30.17.png 788w" sizes="(max-width: 300px) 100vw, 300px" /><p id="caption-attachment-7297" class="wp-caption-text">A <a href="https://www.amazon.co.uk/TFA-Dostmann-48-1503-08-Weather-House-Germany/dp/B07PHYZ5TS/ref=d_pd_sbs_sccl_4_1/262-7292782-5370661?pd_rd_w=u62wm&amp;content-id=amzn1.sym.c633ef94-5925-4800-8916-1372f3be4382&amp;pf_rd_p=c633ef94-5925-4800-8916-1372f3be4382&amp;pf_rd_r=2JMCC8RK4PJTBANJDR5M&amp;pd_rd_wg=QST5L&amp;pd_rd_r=e3c70644-02b0-416d-b212-1f06c94d20a8&amp;pd_rd_i=B07PHYZ5TS&amp;th=1">Traditional Weather House</a></p></div><br />
</figure>
</div>
<p>The way the weather house works is quite simple. Inside the house, there is a strip of catgut or hair. The gut relaxes or shrinks based on the humidity in the surrounding air, relaxing when the air is wet and tensing when the air is dry. Attached to the strip is a small figure of a man and a woman. When the humidity in the air changes, the strip will expand or contract, causing the figures to move.</p>
<p>If the weather is going to be dry and sunny, the man will come out of the house. If it is going to be wet and rainy, the woman will come out of the house. If the humidity is just right, both the man and the woman will be visible.</p>
<p>Traditional German weather houses are, an interesting, if slightly imprecise way to predict the weather. They are also a useful inspiration to develop a slightly more modern version using the Open Weather Map API, a 360-degree non-continuous servo, some neopixels and a Raspberry Pi Pico W.</p>
<p> </p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="419" class="wp-image-7279" src="https://www.digitalurban.org/wp-content/uploads/2023/08/Weatherhousewide@0.5x-1024x419.jpg" alt="Weather House Laser Cut" srcset="https://www.digitalurban.org/wp-content/uploads/2023/08/Weatherhousewide@0.5x-1024x419.jpg 1024w, https://www.digitalurban.org/wp-content/uploads/2023/08/Weatherhousewide@0.5x-300x123.jpg 300w, https://www.digitalurban.org/wp-content/uploads/2023/08/Weatherhousewide@0.5x-768x314.jpg 768w, https://www.digitalurban.org/wp-content/uploads/2023/08/Weatherhousewide@0.5x-1536x628.jpg 1536w, https://www.digitalurban.org/wp-content/uploads/2023/08/Weatherhousewide@0.5x-2048x837.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">The Weather House Reimagined</figcaption></figure>
<p>In essence the house is a series of weather symbols which rotate according to the feed from the Open Weather Map API. This can be set to any location in the world and it updates every 15 minutes. It is also adaptable to change to your own source of weather data, perhaps your own personal weather station.</p>
<p> </p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="614" class="wp-image-7282" src="https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherHouseInternals-1024x614.jpg" alt="Weather House Components" srcset="https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherHouseInternals-1024x614.jpg 1024w, https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherHouseInternals-300x180.jpg 300w, https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherHouseInternals-768x461.jpg 768w, https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherHouseInternals-1536x921.jpg 1536w, https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherHouseInternals-2048x1228.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Weather House Components</figcaption></figure>
<p>There are also two sets of neopixels &#8211; one to light up the symbol, this works well at night and looks like an outside light on the house, allowing the weather conditions to be seen. The other is an 8 pixel neopixel strip which changes colour and animates according to the conditions. If it&#8217;s raining then the lights change to blue and simulate raindrops, for sunny spells they light and dim with tinges of yellow to simulate the sun poking out of the clouds, etc. All of these are editable in the code to change according to your own preference.</p>
<p> </p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="618" class="wp-image-7284" src="https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherHouseNeoPixels-1024x618.jpg" alt="Weather House Neopixels" srcset="https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherHouseNeoPixels-1024x618.jpg 1024w, https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherHouseNeoPixels-300x181.jpg 300w, https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherHouseNeoPixels-768x463.jpg 768w, https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherHouseNeoPixels-1536x927.jpg 1536w, https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherHouseNeoPixels-2048x1235.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Weather House Neopixels</figcaption></figure>
<p>At the heart of the weather house is a Raspberry Pi Pico W, held in a 3D printed enclosure which also encases the LEDs and the Servo.</p>
<p> </p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="495" class="wp-image-7280" src="https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherhouseTopDown-1024x495.jpg" alt="" srcset="https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherhouseTopDown-1024x495.jpg 1024w, https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherhouseTopDown-300x145.jpg 300w, https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherhouseTopDown-768x371.jpg 768w, https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherhouseTopDown-1536x743.jpg 1536w, https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherhouseTopDown-2048x991.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Weather House Laser Cut Outs</figcaption></figure>
<p>It slots into the case which, in our example, is laser cut from white perspex for the house and 3mm plywood for the roof.</p>
<p> </p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="497" class="wp-image-7281" src="https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherHouseLaserCut-1024x497.jpg" alt="Weather House Laser Cut Outs" srcset="https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherHouseLaserCut-1024x497.jpg 1024w, https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherHouseLaserCut-300x145.jpg 300w, https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherHouseLaserCut-768x372.jpg 768w, https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherHouseLaserCut-1536x745.jpg 1536w, https://www.digitalurban.org/wp-content/uploads/2023/08/WeatherHouseLaserCut-2048x993.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Weather House Laser Cut Outs</figcaption></figure>
<p>Once assembled the 3D printed enclosure along with the dial, fits into the main house. The servo is set to its starting point with the &#8216;Sun&#8217; icon showing through the window.</p>
<div id="attachment_7302" style="width: 784px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-7302" class=" wp-image-7302" src="https://www.digitalurban.org/wp-content/uploads/2023/08/Weather-House-Angled-300x166.jpg" alt="Weather House Inside View " width="774" height="428" srcset="https://www.digitalurban.org/wp-content/uploads/2023/08/Weather-House-Angled-300x166.jpg 300w, https://www.digitalurban.org/wp-content/uploads/2023/08/Weather-House-Angled-1024x567.jpg 1024w, https://www.digitalurban.org/wp-content/uploads/2023/08/Weather-House-Angled-768x425.jpg 768w, https://www.digitalurban.org/wp-content/uploads/2023/08/Weather-House-Angled-1536x851.jpg 1536w, https://www.digitalurban.org/wp-content/uploads/2023/08/Weather-House-Angled-2048x1134.jpg 2048w" sizes="auto, (max-width: 774px) 100vw, 774px" /><p id="caption-attachment-7302" class="wp-caption-text">Weather House Inside View</p></div>
<p>We power ours from a 20,000mAh power bank which keeps it running for about a week. Each time the data updates the outside lamp turns on and off, so you have a visual clue that new data has uploaded.</p>
<p> </p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="508" class="wp-image-7291" src="https://www.digitalurban.org/wp-content/uploads/2023/08/Weather-House-45-Degrees-1024x508.jpg" alt="Weather House Looking Down" srcset="https://www.digitalurban.org/wp-content/uploads/2023/08/Weather-House-45-Degrees-1024x508.jpg 1024w, https://www.digitalurban.org/wp-content/uploads/2023/08/Weather-House-45-Degrees-300x149.jpg 300w, https://www.digitalurban.org/wp-content/uploads/2023/08/Weather-House-45-Degrees-768x381.jpg 768w, https://www.digitalurban.org/wp-content/uploads/2023/08/Weather-House-45-Degrees-1536x761.jpg 1536w, https://www.digitalurban.org/wp-content/uploads/2023/08/Weather-House-45-Degrees-2048x1015.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">The Final Built Weather House</figcaption></figure>
	</div>
</div>




			</div> 
		</div>
	</div> 
</div></div>
		<div id="fws_6970f8de70ad4"  data-column-margin="default" data-midnight="dark"  class="wpb_row vc_row-fluid vc_row"  style="padding-top: 0px; padding-bottom: 0px; "><div class="row-bg-wrap" data-bg-animation="none" data-bg-animation-delay="" data-bg-overlay="false"><div class="inner-wrap row-bg-layer" ><div class="row-bg viewport-desktop"  style=""></div></div></div><div class="row_col_wrap_12 col span_12 dark left">
	<div  class="vc_col-sm-12 wpb_column column_container vc_column_container col no-extra-padding inherit_tablet inherit_phone "  data-padding-pos="all" data-has-bg-color="false" data-bg-color="" data-bg-opacity="1" data-animation="" data-delay="0" >
		<div class="vc_column-inner" >
			<div class="wpb_wrapper">
				
<div class="wpb_text_column wpb_content_element " >
	<div class="wpb_wrapper">
		<p>The Micropython code, build components, 3D print and laser cut files are available on <a href="https://github.com/digitalurban/Weather-House">our accompanying GitHub page</a>, note the project is still a work in progress..</p>
	</div>
</div>




			</div> 
		</div>
	</div> 
</div></div><p>The post <a href="https://www.digitalurban.org/blog/2023/08/18/reimaging-the-traditional-weather-house-with-open-data-laser-cutting-and-3d-printing/">Reimaging the Traditional Weather House with Open Data, Laser Cutting and 3D Printing</a> appeared first on <a href="https://www.digitalurban.org">Digital Urban</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Colours: A Live London Weather Dashboard</title>
		<link>https://www.digitalurban.org/blog/2013/05/23/live-london-weather-dashboard-colours/</link>
		
		<dc:creator><![CDATA[Andy]]></dc:creator>
		<pubDate>Thu, 23 May 2013 06:05:51 +0000</pubDate>
				<category><![CDATA[data visualization]]></category>
		<category><![CDATA[Weather]]></category>
		<category><![CDATA[Weather London]]></category>
		<guid isPermaLink="false">http://www.digitalurban.org/?p=3383</guid>

					<description><![CDATA[<p>Here at The Bartlett Centre for Advanced Spatial Analysis we run a Davis Vantage Pro 2 unit with Solar and UV sensors from a rooftop on Tottenham Court Road. The current...</p>
<p>The post <a href="https://www.digitalurban.org/blog/2013/05/23/live-london-weather-dashboard-colours/">Colours: A Live London Weather Dashboard</a> appeared first on <a href="https://www.digitalurban.org">Digital Urban</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Here at <a title="CASA, UCL" href="http://www.casa.ucl.ac.uk">The Bartlett Centre for Advanced Spatial Analysis </a>we run a Davis Vantage Pro 2 unit with Solar and UV sensors from a rooftop on Tottenham Court Road. The current output is via our live &#8216;<a href="http://www.digitalurban.org/weather">Weather Dials</a>&#8216; page, which is all singing and dancing, complete with graphs and updates every 2 seconds. Sometimes however there is a need for something simpler, a dashboard style view that changes background colour to a variety of pantone shades according to temperature:<br />
<div id="attachment_3394" style="width: 682px" class="wp-caption aligncenter"><a href="http://www.casa.ucl.ac.uk/weather/colours.html"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-3394" class=" wp-image-3394 " title="Colours - London Live Weather" alt="Colours - London Live Weather" src="https://www.digitalurban.org/wp-content/uploads/2013/05/Screen-Shot-2013-05-22-at-22.45.26-1.png" width="672" height="354" srcset="https://www.digitalurban.org/wp-content/uploads/2013/05/Screen-Shot-2013-05-22-at-22.45.26-1.png 960w, https://www.digitalurban.org/wp-content/uploads/2013/05/Screen-Shot-2013-05-22-at-22.45.26-1-300x158.png 300w, https://www.digitalurban.org/wp-content/uploads/2013/05/Screen-Shot-2013-05-22-at-22.45.26-1-768x405.png 768w" sizes="auto, (max-width: 672px) 100vw, 672px" /></a><p id="caption-attachment-3394" class="wp-caption-text">Colours &#8211; London Live Weather</p></div><br />
Made with a tablet in mind and to hang on a wall, &#8216;Colours&#8217; is designed to be a simple weather application for London at a glance, data updates every two seconds.<br />
<center><div id="attachment_3387" style="width: 310px" class="wp-caption aligncenter"><a href="https://www.digitalurban.org/wp-content/uploads/2013/05/Screen-Shot-2013-05-22-at-19.45.55-1.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-3387" class="size-medium wp-image-3387" alt="Backgrounds" src="https://www.digitalurban.org/wp-content/uploads/2013/05/Screen-Shot-2013-05-22-at-19.45.55-1-300x49.png" width="300" height="49" srcset="https://www.digitalurban.org/wp-content/uploads/2013/05/Screen-Shot-2013-05-22-at-19.45.55-1-300x49.png 300w, https://www.digitalurban.org/wp-content/uploads/2013/05/Screen-Shot-2013-05-22-at-19.45.55-1.png 763w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><p id="caption-attachment-3387" class="wp-caption-text">Backgrounds</p></div><br />
</center>Thanks go to <a href="http://oliverobrien.co.uk/">Ollie</a> from CASA for the background script and the <a href="http://thenounproject.com/collections/climacons/">NounProject</a> (Adam Whitcroft) for the icons.<br />
View it live at <a href="http://www.casa.ucl.ac.uk/weather/colours.html">http://www.casa.ucl.ac.uk/weather/colours.html</a><br />
&nbsp;</p>
<p>The post <a href="https://www.digitalurban.org/blog/2013/05/23/live-london-weather-dashboard-colours/">Colours: A Live London Weather Dashboard</a> appeared first on <a href="https://www.digitalurban.org">Digital Urban</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Live London Weather</title>
		<link>https://www.digitalurban.org/blog/2012/08/07/live-london-weather/</link>
		
		<dc:creator><![CDATA[Andy]]></dc:creator>
		<pubDate>Tue, 07 Aug 2012 14:47:03 +0000</pubDate>
				<category><![CDATA[Front Page]]></category>
		<category><![CDATA[Weather]]></category>
		<category><![CDATA[Weather (Live)]]></category>
		<category><![CDATA[Weather London]]></category>
		<guid isPermaLink="false">http://www.digitalurban.org/?p=2901</guid>

					<description><![CDATA[<p>We have updated our live weather page to work with the iPad/iPhone and other HTML compatible browsers. The page updates every 3 seconds with a live feed from a Davis Vantage...</p>
<p>The post <a href="https://www.digitalurban.org/blog/2012/08/07/live-london-weather/">Live London Weather</a> appeared first on <a href="https://www.digitalurban.org">Digital Urban</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><a href="http://www.casa.ucl.ac.uk/cumulus/ipad.html"><img loading="lazy" decoding="async" class="size-medium wp-image-2903 alignright" title="Live London Weather iPad" src="https://www.digitalurban.org/wp-content/uploads/2012/08/Screen-Shot-2012-08-07-at-15.31.45-1-300x196.png" alt="" width="300" height="196" /></a><br />
We have updated our live weather page to work with the iPad/iPhone and other HTML compatible browsers.<br />
The page updates every 3 seconds with a live feed from a Davis Vantage Pro 2 on the roof of 1-19 Torrington Place, just off Tottenham Court Road in London.<br />
For those with the new iPad we have a retina friendly version with a series of 9 large dials and graphs.<br />
<a href="http://www.casa.ucl.ac.uk/cumulus/ipad.html">Standard Version</a> / <a href="http://www.casa.ucl.ac.uk/cumulus/ipadnew.html">Retina</a><br />
Both pages are in beta&#8230;</p>
<p>The post <a href="https://www.digitalurban.org/blog/2012/08/07/live-london-weather/">Live London Weather</a> appeared first on <a href="https://www.digitalurban.org">Digital Urban</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Tutorial: Torch/Flashlight + Webcam = HD Timelapse System</title>
		<link>https://www.digitalurban.org/blog/2008/11/24/tutorial-torch-webcam-hd-timelapse-2/</link>
					<comments>https://www.digitalurban.org/blog/2008/11/24/tutorial-torch-webcam-hd-timelapse-2/#comments</comments>
		
		<dc:creator><![CDATA[Andy]]></dc:creator>
		<pubDate>Mon, 24 Nov 2008 13:14:00 +0000</pubDate>
				<category><![CDATA[How To]]></category>
		<category><![CDATA[Timelapse]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Weather]]></category>
		<category><![CDATA[WebCam]]></category>
		<guid isPermaLink="false">http://digitalurban.net/?p=1529</guid>

					<description><![CDATA[<p>Over the past few months we have been running views of the city created from a webcam mounted on our roof looking over the London skyline from Camden Town. The...</p>
<p>The post <a href="https://www.digitalurban.org/blog/2008/11/24/tutorial-torch-webcam-hd-timelapse-2/">Tutorial: Torch/Flashlight + Webcam = HD Timelapse System</a> appeared first on <a href="https://www.digitalurban.org">Digital Urban</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><a href="http://2.bp.blogspot.com/_ADwvfqkxChw/SG-TXAVs39I/AAAAAAAABPc/CVhhuYWg64s/s400/Cloud4thJuly.jpg"><img decoding="async" alt="" border="0" src="http://2.bp.blogspot.com/_ADwvfqkxChw/SG-TXAVs39I/AAAAAAAABPc/CVhhuYWg64s/s400/Cloud4thJuly.jpg" style="cursor: pointer; display: block; height: 220px; margin: 0px auto 10px; text-align: center; width: 400px;" /></a>Over the past few months we have been running views of the city created from a webcam mounted on our roof looking over the London skyline from Camden Town. The setup, although remarkably simple, <a href="http://4.bp.blogspot.com/_ADwvfqkxChw/SSqp6Wl2-PI/AAAAAAAAB2A/bT3WJvMo90Y/s1600-h/webcam"><img decoding="async" alt="" border="0" id="BLOGGER_PHOTO_ID_5272213133752465650" src="http://4.bp.blogspot.com/_ADwvfqkxChw/SSqp6Wl2-PI/AAAAAAAAB2A/bT3WJvMo90Y/s200/webcam" style="cursor: pointer; float: right; height: 134px; margin: 0pt 0pt 10px 10px; width: 200px;" /></a>is capable of capturing high definition timelapse movies at a fraction of the cost of off the shelf hardware.</p>
<p>Here at digital urban over the years we have got used to setting up capture systems that are low cost yet get the job done, and our timelapse system is hopefully no exception.</p>
<p><span style="font-weight: bold;">You will need</span>:</p>
<p>1 x WebCam &#8211; we recommend the  <a href="http://www.logitech.com/index.cfm/webcam_communications/webcams/devices/3056&#038;cl=US,EN">QuickCam 9000</a> due to its 1600 x 1200 resolution but any USB webcam will do.</p>
<p>1 x Waterproof Torch &#8211; see the photograph below, any torch that is generally waterproof is suitable, ours cost £9.99.</p>
<p>1 x USB Extender Cable &#8211; depending on length required, £15.00</p>
<p>1 x Roll of Electrical Tape</p>
<p>1 x Old Sock</p>
<p>1 x Webcam Capture Software, we used <a href="http://lumai.se/bc.html">Boo</a><a href="http://lumai.se/bc.html">ru Webcam 2.0</a> , £0.</p>
<p>Time Required &#8211; One Hour.</p>
<p><a href="http://1.bp.blogspot.com/_ADwvfqkxChw/SSqqv0eJ-5I/AAAAAAAAB2Q/DZpyhMUSejM/s1600-h/webcam2.jpg"><img decoding="async" alt="" border="0" id="BLOGGER_PHOTO_ID_5272214052306287506" src="http://1.bp.blogspot.com/_ADwvfqkxChw/SSqqv0eJ-5I/AAAAAAAAB2Q/DZpyhMUSejM/s400/webcam2.jpg" style="display: block; height: 191px; margin: 0px auto 10px; text-align: center; width: 400px;" /></a><br /><span style="font-weight: bold;">Step 1: Mounting the Webcam</span></p>
<p>The key is to house the webcam inside the torch, thus creating a unit you can leave outside in all weather while still capturing images. As such the first step is to take the torch apart, remove all the internals, unscrew the front section and pull out the reflector.</p>
<p>The webcam is housed inside the reflector, where the bulb used to be. To allow a snug fit simply thread the USB cable of the webcam through the hole where the bulb was and pull so the webcam is secure inside.</p>
<p>We tried various methods to secure the webcam but the best is to allow it to simply sit on top of an old sock, this allows the cam to remain tight in the housing while also allowing last minute adjustments. We know it sounds very low tech, but trust us it we reached this conclusion after hours of trial and error with a lot of glue and fixings.</p>
<p><span style="font-weight: bold;">Step 2: Wiring it Up</span></p>
<p>Drill a hole in the base of the torch and thread the USB lead through, screw back on the glass front and you are done. You should now have a torch with a webcam inside complete with a USB cable coming our the back.<br /><a href="http://3.bp.blogspot.com/_ADwvfqkxChw/SSrb_f0RjHI/AAAAAAAAB2Y/9zTSQmzBH28/s1600-h/l11bt.jpg"><img decoding="async" alt="" border="0" id="BLOGGER_PHOTO_ID_5272268197709581426" src="http://3.bp.blogspot.com/_ADwvfqkxChw/SSrb_f0RjHI/AAAAAAAAB2Y/9zTSQmzBH28/s200/l11bt.jpg" style="cursor: pointer; float: right; height: 155px; margin: 0pt 0pt 10px 10px; width: 200px;" /></a><br />Our webcam sits on the roof with the cable running down to the eves and coming into the house through a window. Our run is approximately 10 metres so we have linked up the end of the USB of the webcam to the computer using an Active USB extender.</p>
<p>An active USB extender is designed to allow cable runs over and above the usual 5m limit. Multiple leads may be connected up to a maximum of 3, giving a maximum cable run of up to 20m (with three active and one standard lead). We simply plugged the USB cable into the extender and wrapped the connection in electrical tape to keep out the rain.</p>
<p>The webcam is ready to go and ready to mount wherever has a good view. The torch we used is useful as it has a stand allowing it to point at the sky or to be mounted on a ledge. Ours is secured to a chimney pot using regular cable ties.</p>
<p><span style="font-weight: bold;">Step 3: Capture the Images</span></p>
<p>Timelapse images work by capturing a image few every few seconds and then stringing together the sequence to produce a movie. Our webcam is linked up to a <a href="http://eeepc.asus.com/global/products.html?n=0">Eee PC </a>running Windows XP, the laptop runs almost silently which is a bonus as most timelapses run for many hours.</p>
<p>There are numerous software packages for capturing timelapse images, we used <a href="http://lumai.se/bc.html">Booru WebCam 2.0</a> as its both free and one of the best available on the Windows platform. For Mac users <a href="http://gawker.sourceforge.net/Gawker.html">Gawker</a> is a free and extremely easy option to use, although note the <a href="http://www.logitech.com/index.cfm/webcam_communications/webcams/devices/3056&#038;cl=US,EN">QuickCam 9000</a> is not Mac friendly, it is worth taking a look at the <a href="http://www.logitech.com/index.cfm/webcam_communications/webcams/devices/4528&#038;cl=us,en">Logitech Vision Pro</a> instead.</p>
<p>The general rule is to capture an image every 5 or 10 seconds in .png format for minimum loss of quality. The images are saved in sequence ready to be merged into a usable movie, we store ours on a portable hard drive as it is all too easy to run out of disk space when capturing every 5 seconds over a 24 hour period.</p>
<p><span style="font-weight: bold;">Step 4: Create the Movie</span></p>
<p>There are many ways to create a movie from a series of images. The simplest way is to use QuickTime Pro which allows one to open an image sequence (file > Open > Image Sequence), set the framerate (normally 24 frames per second) and save. If you don&#8217;t wish to use QuickTime Pro then take a look at this easy to follow tutorial on <a href="http://onlinephototutorials.com/2008/07/25/windows-movie-maker-timelapse/">using Windows Movie Maker</a>.</p>
<p>Below is an example movie captured using our set up. The frames were captured as detailed above, opened in QuickTime Pro and then simply saved at 1280 x 720 for upload to Vimeo. The whole process takes approximately 15 minutes.</p>
<p><center><object height="480" width="640"><param name="allowfullscreen" value="true"><param name="allowscriptaccess" value="always"><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=1345239&#038;server=vimeo.com&#038;show_title=1&#038;show_byline=0&#038;show_portrait=0&#038;color=ffffff&#038;fullscreen=1"><embed src="http://vimeo.com/moogaloop.swf?clip_id=1345239&#038;server=vimeo.com&#038;show_title=1&#038;show_byline=0&#038;show_portrait=0&#038;color=ffffff&#038;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" height="480" width="640"></embed></object><br /><a href="http://vimeo.com/1345239">London Summers Day</a> from <a href="http://vimeo.com/user584207">digitalurban</a> on <a href="http://vimeo.com/">Vimeo</a>.</center><br />Music: <a href="http://www.mp3unsigned.com/Showmp3.asp?mp3id=46830">Ghostlight</a></p>
<p>The aerial is in view throughout the movie above, as such you can use the digital zoom function on the webcam to zoom past the aerial, allowing a clearer view of the skyline. The movie below was created using the digital zoom:</p>
<p><center><object height="480" width="640"><param name="allowfullscreen" value="true"><param name="allowscriptaccess" value= 
"always"><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=2334049&#038;server=vimeo.com&#038;show_title=1&#038;show_byline=0&#038;show_portrait=0&#038;color=ffffff&#038;fullscreen=1"><embed src="http://vimeo.com/moogaloop.swf?clip_id=2334049&#038;server=vimeo.com&#038;show_title=1&#038;show_byline=0&#038;show_portrait=0&#038;color=ffffff&#038;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" height="480" width="640"></embed></object><br /><a href="http://vimeo.com/2334049">London Clouds Timelapse, November 23rd 2008</a> from <a href="http://vimeo.com/user584207">digitalurban</a> on <a href="http://vimeo.com/">Vimeo</a>.</center></p>
<p>Music: <a href="http://www.mp3unsigned.com/showmp3.asp?mp3ID=50939">Let it Rain</a></p>
<p>If you do install a webcam in a torch and create a timelapse movie do let us know and any thoughts/question are of course welcome via the comments below.</p>
<p>Update &#8211; see our post on <a href="http://digitalurban.blogspot.com/2008/11/gis-timelapse-for-pedestrian-movement.html">GIS Timelapse for Pedestrian Movement Analysis </a>for an example using the Booru webcam software and timestamped images.</p>
<p>The post <a href="https://www.digitalurban.org/blog/2008/11/24/tutorial-torch-webcam-hd-timelapse-2/">Tutorial: Torch/Flashlight + Webcam = HD Timelapse System</a> appeared first on <a href="https://www.digitalurban.org">Digital Urban</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.digitalurban.org/blog/2008/11/24/tutorial-torch-webcam-hd-timelapse-2/feed/</wfw:commentRss>
			<slash:comments>17</slash:comments>
		
		
			</item>
		<item>
		<title>Tutorial: Torch/Flashlight + Webcam = HD Timelapse System</title>
		<link>https://www.digitalurban.org/blog/2008/11/24/tutorial-torch-webcam-hd-timelapse/</link>
					<comments>https://www.digitalurban.org/blog/2008/11/24/tutorial-torch-webcam-hd-timelapse/#comments</comments>
		
		<dc:creator><![CDATA[Andy]]></dc:creator>
		<pubDate>Mon, 24 Nov 2008 13:14:00 +0000</pubDate>
				<category><![CDATA[How To]]></category>
		<category><![CDATA[Timelapse]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Weather]]></category>
		<category><![CDATA[WebCam]]></category>
		<guid isPermaLink="false">http://digitalurban.net/?p=1529</guid>

					<description><![CDATA[<p>Over the past few months we have been running views of the city created from a webcam mounted on our roof looking over the London skyline from Camden Town. The...</p>
<p>The post <a href="https://www.digitalurban.org/blog/2008/11/24/tutorial-torch-webcam-hd-timelapse/">Tutorial: Torch/Flashlight + Webcam = HD Timelapse System</a> appeared first on <a href="https://www.digitalurban.org">Digital Urban</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><a href="http://2.bp.blogspot.com/_ADwvfqkxChw/SG-TXAVs39I/AAAAAAAABPc/CVhhuYWg64s/s400/Cloud4thJuly.jpg"><img decoding="async" alt="" border="0" src="http://2.bp.blogspot.com/_ADwvfqkxChw/SG-TXAVs39I/AAAAAAAABPc/CVhhuYWg64s/s400/Cloud4thJuly.jpg" style="cursor: pointer; display: block; height: 220px; margin: 0px auto 10px; text-align: center; width: 400px;" /></a>Over the past few months we have been running views of the city created from a webcam mounted on our roof looking over the London skyline from Camden Town. The setup, although remarkably simple, <a href="http://4.bp.blogspot.com/_ADwvfqkxChw/SSqp6Wl2-PI/AAAAAAAAB2A/bT3WJvMo90Y/s1600-h/webcam"><img decoding="async" alt="" border="0" id="BLOGGER_PHOTO_ID_5272213133752465650" src="http://4.bp.blogspot.com/_ADwvfqkxChw/SSqp6Wl2-PI/AAAAAAAAB2A/bT3WJvMo90Y/s200/webcam" style="cursor: pointer; float: right; height: 134px; margin: 0pt 0pt 10px 10px; width: 200px;" /></a>is capable of capturing high definition timelapse movies at a fraction of the cost of off the shelf hardware.</p>
<p>Here at digital urban over the years we have got used to setting up capture systems that are low cost yet get the job done, and our timelapse system is hopefully no exception.</p>
<p><span style="font-weight: bold;">You will need</span>:</p>
<p>1 x WebCam &#8211; we recommend the  <a href="http://www.logitech.com/index.cfm/webcam_communications/webcams/devices/3056&#038;cl=US,EN">QuickCam 9000</a> due to its 1600 x 1200 resolution but any USB webcam will do.</p>
<p>1 x Waterproof Torch &#8211; see the photograph below, any torch that is generally waterproof is suitable, ours cost £9.99.</p>
<p>1 x USB Extender Cable &#8211; depending on length required, £15.00</p>
<p>1 x Roll of Electrical Tape</p>
<p>1 x Old Sock</p>
<p>1 x Webcam Capture Software, we used <a href="http://lumai.se/bc.html">Boo</a><a href="http://lumai.se/bc.html">ru Webcam 2.0</a> , £0.</p>
<p>Time Required &#8211; One Hour.</p>
<p><a href="http://1.bp.blogspot.com/_ADwvfqkxChw/SSqqv0eJ-5I/AAAAAAAAB2Q/DZpyhMUSejM/s1600-h/webcam2.jpg"><img decoding="async" alt="" border="0" id="BLOGGER_PHOTO_ID_5272214052306287506" src="http://1.bp.blogspot.com/_ADwvfqkxChw/SSqqv0eJ-5I/AAAAAAAAB2Q/DZpyhMUSejM/s400/webcam2.jpg" style="display: block; height: 191px; margin: 0px auto 10px; text-align: center; width: 400px;" /></a><br /><span style="font-weight: bold;">Step 1: Mounting the Webcam</span></p>
<p>The key is to house the webcam inside the torch, thus creating a unit you can leave outside in all weather while still capturing images. As such the first step is to take the torch apart, remove all the internals, unscrew the front section and pull out the reflector.</p>
<p>The webcam is housed inside the reflector, where the bulb used to be. To allow a snug fit simply thread the USB cable of the webcam through the hole where the bulb was and pull so the webcam is secure inside.</p>
<p>We tried various methods to secure the webcam but the best is to allow it to simply sit on top of an old sock, this allows the cam to remain tight in the housing while also allowing last minute adjustments. We know it sounds very low tech, but trust us it we reached this conclusion after hours of trial and error with a lot of glue and fixings.</p>
<p><span style="font-weight: bold;">Step 2: Wiring it Up</span></p>
<p>Drill a hole in the base of the torch and thread the USB lead through, screw back on the glass front and you are done. You should now have a torch with a webcam inside complete with a USB cable coming our the back.<br /><a href="http://3.bp.blogspot.com/_ADwvfqkxChw/SSrb_f0RjHI/AAAAAAAAB2Y/9zTSQmzBH28/s1600-h/l11bt.jpg"><img decoding="async" alt="" border="0" id="BLOGGER_PHOTO_ID_5272268197709581426" src="http://3.bp.blogspot.com/_ADwvfqkxChw/SSrb_f0RjHI/AAAAAAAAB2Y/9zTSQmzBH28/s200/l11bt.jpg" style="cursor: pointer; float: right; height: 155px; margin: 0pt 0pt 10px 10px; width: 200px;" /></a><br />Our webcam sits on the roof with the cable running down to the eves and coming into the house through a window. Our run is approximately 10 metres so we have linked up the end of the USB of the webcam to the computer using an Active USB extender.</p>
<p>An active USB extender is designed to allow cable runs over and above the usual 5m limit. Multiple leads may be connected up to a maximum of 3, giving a maximum cable run of up to 20m (with three active and one standard lead). We simply plugged the USB cable into the extender and wrapped the connection in electrical tape to keep out the rain.</p>
<p>The webcam is ready to go and ready to mount wherever has a good view. The torch we used is useful as it has a stand allowing it to point at the sky or to be mounted on a ledge. Ours is secured to a chimney pot using regular cable ties.</p>
<p><span style="font-weight: bold;">Step 3: Capture the Images</span></p>
<p>Timelapse images work by capturing a image few every few seconds and then stringing together the sequence to produce a movie. Our webcam is linked up to a <a href="http://eeepc.asus.com/global/products.html?n=0">Eee PC </a>running Windows XP, the laptop runs almost silently which is a bonus as most timelapses run for many hours.</p>
<p>There are numerous software packages for capturing timelapse images, we used <a href="http://lumai.se/bc.html">Booru WebCam 2.0</a> as its both free and one of the best available on the Windows platform. For Mac users <a href="http://gawker.sourceforge.net/Gawker.html">Gawker</a> is a free and extremely easy option to use, although note the <a href="http://www.logitech.com/index.cfm/webcam_communications/webcams/devices/3056&#038;cl=US,EN">QuickCam 9000</a> is not Mac friendly, it is worth taking a look at the <a href="http://www.logitech.com/index.cfm/webcam_communications/webcams/devices/4528&#038;cl=us,en">Logitech Vision Pro</a> instead.</p>
<p>The general rule is to capture an image every 5 or 10 seconds in .png format for minimum loss of quality. The images are saved in sequence ready to be merged into a usable movie, we store ours on a portable hard drive as it is all too easy to run out of disk space when capturing every 5 seconds over a 24 hour period.</p>
<p><span style="font-weight: bold;">Step 4: Create the Movie</span></p>
<p>There are many ways to create a movie from a series of images. The simplest way is to use QuickTime Pro which allows one to open an image sequence (file > Open > Image Sequence), set the framerate (normally 24 frames per second) and save. If you don&#8217;t wish to use QuickTime Pro then take a look at this easy to follow tutorial on <a href="http://onlinephototutorials.com/2008/07/25/windows-movie-maker-timelapse/">using Windows Movie Maker</a>.</p>
<p>Below is an example movie captured using our set up. The frames were captured as detailed above, opened in QuickTime Pro and then simply saved at 1280 x 720 for upload to Vimeo. The whole process takes approximately 15 minutes.</p>
<p><center><object height="480" width="640"><param name="allowfullscreen" value="true"><param name="allowscriptaccess" value="always"><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=1345239&#038;server=vimeo.com&#038;show_title=1&#038;show_byline=0&#038;show_portrait=0&#038;color=ffffff&#038;fullscreen=1"><embed src="http://vimeo.com/moogaloop.swf?clip_id=1345239&#038;server=vimeo.com&#038;show_title=1&#038;show_byline=0&#038;show_portrait=0&#038;color=ffffff&#038;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" height="480" width="640"></embed></object><br /><a href="http://vimeo.com/1345239">London Summers Day</a> from <a href="http://vimeo.com/user584207">digitalurban</a> on <a href="http://vimeo.com/">Vimeo</a>.</center><br />Music: <a href="http://www.mp3unsigned.com/Showmp3.asp?mp3id=46830">Ghostlight</a></p>
<p>The aerial is in view throughout the movie above, as such you can use the digital zoom function on the webcam to zoom past the aerial, allowing a clearer view of the skyline. The movie below was created using the digital zoom:</p>
<p><center><object height="480" width="640"><param name="allowfullscreen" value="true"><param name="allowscriptaccess" value= 
"always"><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=2334049&#038;server=vimeo.com&#038;show_title=1&#038;show_byline=0&#038;show_portrait=0&#038;color=ffffff&#038;fullscreen=1"><embed src="http://vimeo.com/moogaloop.swf?clip_id=2334049&#038;server=vimeo.com&#038;show_title=1&#038;show_byline=0&#038;show_portrait=0&#038;color=ffffff&#038;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" height="480" width="640"></embed></object><br /><a href="http://vimeo.com/2334049">London Clouds Timelapse, November 23rd 2008</a> from <a href="http://vimeo.com/user584207">digitalurban</a> on <a href="http://vimeo.com/">Vimeo</a>.</center></p>
<p>Music: <a href="http://www.mp3unsigned.com/showmp3.asp?mp3ID=50939">Let it Rain</a></p>
<p>If you do install a webcam in a torch and create a timelapse movie do let us know and any thoughts/question are of course welcome via the comments below.</p>
<p>Update &#8211; see our post on <a href="http://digitalurban.blogspot.com/2008/11/gis-timelapse-for-pedestrian-movement.html">GIS Timelapse for Pedestrian Movement Analysis </a>for an example using the Booru webcam software and timestamped images.</p>
<p>The post <a href="https://www.digitalurban.org/blog/2008/11/24/tutorial-torch-webcam-hd-timelapse/">Tutorial: Torch/Flashlight + Webcam = HD Timelapse System</a> appeared first on <a href="https://www.digitalurban.org">Digital Urban</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.digitalurban.org/blog/2008/11/24/tutorial-torch-webcam-hd-timelapse/feed/</wfw:commentRss>
			<slash:comments>17</slash:comments>
		
		
			</item>
		<item>
		<title>London Live Weather Data</title>
		<link>https://www.digitalurban.org/blog/2008/03/12/london-live-weather-data/</link>
					<comments>https://www.digitalurban.org/blog/2008/03/12/london-live-weather-data/#comments</comments>
		
		<dc:creator><![CDATA[Andy]]></dc:creator>
		<pubDate>Wed, 12 Mar 2008 15:44:00 +0000</pubDate>
				<category><![CDATA[Weather]]></category>
		<category><![CDATA[Weather (Live)]]></category>
		<guid isPermaLink="false">http://digitalurban.net/?p=1734</guid>

					<description><![CDATA[<p>Its taken a bit of time but our live weather data from the roof of CASA towers here in Central London is now back up and running.Complete with its own...</p>
<p>The post <a href="https://www.digitalurban.org/blog/2008/03/12/london-live-weather-data/">London Live Weather Data</a> appeared first on <a href="https://www.digitalurban.org">Digital Urban</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Its taken a bit of time but our live weather data from the roof of CASA towers here in Central London is now back up and running.<a href="http://www.casa.ucl.ac.uk/weather/"><img decoding="async" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_ADwvfqkxChw/R9f7L9jSH3I/AAAAAAAABGs/RnmTMBNBrqM/s400/weather.png" alt="" id="BLOGGER_PHOTO_ID_5176882479605358450" border="0" /></a><br />Complete with its own dedicated server the weather data is now available 24/7 and should form part of a wider network to create a 3D view of London&#8217;s urban heat island in Google Earth (more on that in coming months).</p>
<p><a href="http://www.casa.ucl.ac.uk/weather/">View Live Weather Data from London</a> (data uploads every 3 seconds)</p>
<p>The post <a href="https://www.digitalurban.org/blog/2008/03/12/london-live-weather-data/">London Live Weather Data</a> appeared first on <a href="https://www.digitalurban.org">Digital Urban</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.digitalurban.org/blog/2008/03/12/london-live-weather-data/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
			</item>
		<item>
		<title>Second Life &#8211; Global Weather Updates</title>
		<link>https://www.digitalurban.org/blog/2007/10/26/second-life-global-weather-updates/</link>
					<comments>https://www.digitalurban.org/blog/2007/10/26/second-life-global-weather-updates/#comments</comments>
		
		<dc:creator><![CDATA[Andy]]></dc:creator>
		<pubDate>Fri, 26 Oct 2007 17:01:00 +0000</pubDate>
				<category><![CDATA[Second Life]]></category>
		<category><![CDATA[Weather]]></category>
		<guid isPermaLink="false">http://digitalurban.net/?p=1894</guid>

					<description><![CDATA[<p>Our experiments with weather data in Second Life continue, this time we have a couple of global maps in our space on Second Nature Island displaying temperature, rainfall, wind speed,...</p>
<p>The post <a href="https://www.digitalurban.org/blog/2007/10/26/second-life-global-weather-updates/">Second Life &#8211; Global Weather Updates</a> appeared first on <a href="https://www.digitalurban.org">Digital Urban</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><a href="http://1.bp.blogspot.com/_ADwvfqkxChw/RyIdnxeNupI/AAAAAAAAAyk/GINc3XsFyvI/s1600-h/weather1.jpg"><img decoding="async" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_ADwvfqkxChw/RyIdnxeNupI/AAAAAAAAAyk/GINc3XsFyvI/s400/weather1.jpg" alt="" id="BLOGGER_PHOTO_ID_5125691895033215634" border="0" /></a>Our experiments with weather data in Second Life continue, this time we have a couple of global maps in our space on Second Nature Island displaying temperature, rainfall, wind speed, barometric pressure and humidity round the world.</p>
<p>The global data is updated every 15 minutes with the data for the UK on the local map updated every 10 seconds, allowing the 3d visualisation to morph between values.</p>
<p>If you have Second Life installed you can visit us by <a href="http://slurl.com/secondlife/Second%20Nature%202/202/192/117">clicking here</a> &#8211; you will get a red arrow pointing skywards, simply fly up to our section of Second Nature island.</p>
<p>You can <a href="http://secondlife.com/community/downloads.php">download Second Life from here</a>.</p>
<p>Thanks go to the guys at <a href="http://www.weather-display.com/mmlive.php">MesoMap</a> for kindly letting us use the data.</p>
<p>The post <a href="https://www.digitalurban.org/blog/2007/10/26/second-life-global-weather-updates/">Second Life &#8211; Global Weather Updates</a> appeared first on <a href="https://www.digitalurban.org">Digital Urban</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.digitalurban.org/blog/2007/10/26/second-life-global-weather-updates/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
