The SOHO Shop Blog

Extra Vegetables is offering up a tasty solution to AppleTV control. From their website:

The Apple TV is a great product to use in a Control4 installation especially when the client has a collection of iTunes purchased music.  It’s movie and TV show on demand feature is incredibly popular too.

Up to now you have only been able to control the Apple TV via IR with a bug stuck to the front of the device.  Given that the Apple TV is designed to run hot these tend to fall off.  That’s bad news all round.

We want to deliver fully integrated systems – which means choosing the music from the Apple TV from the Control4 touchscreens and TV display.  Again that’s not been possible – but we are working on it.ev_logo


Apple TV – IR Bug Control4 Driverworks Driver - contact your dealer for pricing
Now released a simple driver that allows you to control the Apple TV over an IP network connection.  It provides the same level of control as the standard Apple TV remote but with a couple of extras

  • The ‘Context Menu’ is available on the Info button
  • You can skip chapters and fast forward and rewind in movie content
  • With the standard IR driver when a second room selects the Apple TV the Play/Pause key is sent which causes whatever is playing to pause – this does not happen with the IP version.

Please note no feedback from the Apple TV is provided with this driver.

It saves the cost of the IR bug, frees up an IR port on the controller and prevents call backs when the IR bug falls off the front.

 


 

Apple TV – Full Two Way Control Control4 Driverworks Driver

In development is the full two-way driver for the Apple TV.  This will allow you to choose music from your Apple TV from any of the Control4 interfaces.

The release candidate for this product is in final testing.  It is expected to be launched on 1 December.  We will be offering a special introductory price on this driver and you will also be able to upgrade the 1 way driver too!

 

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Slashdot
  • StumbleUpon
  • Twitter

The SOHO Shop is now offering free hosting of your Control4 project file. You can use the easy submission form on their website, and they store it on a secure server.  In the event you need it, you can simply call or email them and they will send it to your dealer of record. The SOHO Shop is proud to offer this to all Control4 users and dealers – even if you are not their customer. This is great if you like to experiment with your programming and want to make sure you can recover to a known-working configuration. Click here for the upload page.

 

logo08

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Slashdot
  • StumbleUpon
  • Twitter

Control4 is pleased to announce the availability of the Control4® Media Player, which works in conjunction with Controllers, Navigators, and network attached storage (NAS) devices to provide an easy way for home owners to navigate and playback their digital video content. 
 
Control4 has long provided a simple way for home owners to access the discs in their DVD and Blu-ray changers for easy navigation and playback. The Control4 Media Player now allows them to use this same process to access a wide variety of digital video files, including home movies, stored on NAS drives from any TV in your home.

Untitled8C129CCE331C4EB7B677B93E171F32FB 

 
The Control4 vision is to enable an affordable way to deliver all kinds of video around the house, including satellite or cable, DVR, Blu-ray and digital video content using Media Players. The Control4® Media Player can be used to play-back video files over the home network.   
 
Key Features:

  • Plays digital video files directly to your TV
  • Up-converts videos automatically to 1080p HD resolution via the HDMI output
  • Installs in minutes as part of the Control4® system without any complex configuration
  • Through Control4® Composer software, consolidates a home owner’s video collection (DVD discs, Blu-ray discs and video files) into a single virtual library, allowing them to easily navigate their video collection from a single user interface
  • Fits easily into any location. The compact footprint allows it to fit on a tabletop, and is wall-mountable and rack mountable
  • Integrates with and can be controlled by the Control4® system
  • Supports broad file formats and video codecs, including MPEG-2, MPEG-4, H.264, Windows Media Video and more

Audio/Video Outputs:
·         HDMI
·         Component Video
·         S-Video
·         Composite Video
·         Stereo Analog Audio
·         S/PDIF Optical Digital Audio
 
Communications:
·         10/100 BaseT Ethernet
·         USB (software upgrade only)
 
Pricing and Availability:
 

 MSRP is $399. First shipments start in December.

 

  
FAQ:
 
What Control4® system software do I need to run in order to use the Control4® Media Player? 
The driver for the Media Player will be available via the online driver database when the product first ships.  This driver can be used with system software version 1.7.1 or later. However, for best results, we recommend that you use the latest 1.7 or 1.8 system software.
 
What video file formats does the Control4® Media Player support?
Testing has been done and found successful with the following file formats:  ISO, VOB, AVI, MP4, MPG, MOV (H.264), and others. 
 
What video codecs does the Control4® Media Player support?
MPEG-1, MPEG-2, MPEG4, H.264, WMV9, XVID, VC-1
 
Can the Control4® Media Player be wall mounted? 
Yes, the Control4 Media Player can be mounted to on a wall or behind a television. 
 
Can the homeowner play more than one movie at a time?
Each Control4® Media Player can only play back one video at a time, but multiple Media Players can be added to a project.   

-         The Control4® Media Player (C4-MP1-E) will be sold worldwide
           through the Control4® dealer network and will carry a standard
           Control4 two year limited warranty.
-         MSRP is $399

Note: There is no way to play from the USB on the Media Player — this is due primarily to the fact that there is no way for composer to scan a drive connected to the Media Player, plus there would not be a good way to share that content throughout the home. We recommend an Ethernet connected hard drive (NAS).

 

Supported Formats:

 

The file format (also known as the container) is only a part of the overall video file, it’s difficult to say that any specific file format will always play. A video file is made up of three main parts:
1. Encoded video (codec such as MPEG2, H.264, etc)
2. Encoded audio (AC3,
AAC, etc)
3. File container (ifo/vob, avi, mp4, etc)
 

Many audio and video codecs are available from competing companies. For instance, Microsoft has developed the WMV and WMA file formats and associated codecs. A variety of software tools have also been developed to convert files into a broad range of video files. With the variety of audio and video codecs as well, as video file containers available from different companies, it is easy to understand that not all combinations of codecs and file formats will work together. For best results we recommend the following codec and file format combinations:

 

image002 

Note: The Media Player is designed to playback audio that is part of a video file. It supports LPCM, MPEG- 1, MPEG4 (AAC), WMA (standard), and Dolby Digital (AC-3). For best results use the recommended codec and file format combinations listed.

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Slashdot
  • StumbleUpon
  • Twitter

So, there has been some discussion over at C4Forums.com (here to be exact) about how to use a String Variable to track the video/audio source being used in a room. This is useful for several reasons. A big one being the ability to let other users in the house know what you are watching so they don’t hop on that same DVR or DVD player and hijack your show. Another good use is the ability to have the video source change based on an action that took place, and knowing what to switch back to afterwords. Well, let’s get to it.

First thing you will need to do is create a String variable for every room you want to track the audio/video source on. Creating a String variable is easy. Simply click on the Agents tab in Composer, click on Variables, and click New.

Go ahead and repeat this for every room you want to track the current source in.

Now that you have all of your variables created, move on down to the Programming Tab. In the top right corner select the first room we want to track the source in, then down below click on “Video Selection Changed”.

Now, move over to the Device Actions pane and select the room we are currently working with. Down below click on the Conditionals tab and choose “Video Device Selected”, then select “Is”, and in the drop down menu choose your first video source. Drag that line of programming into the middle of the screen. Go ahead and repeat this for EVERY video source available.

Now move back up to the Device Actions pane and scroll all the way down to variables. Click on the “+” sign next to Variables, and then pick the newly created String variable that correlates with the room we are working on currently. Down below select “Set Value to:” and type in the name of the video source. Now remember, you need to type this EXACTLY the same every time. A string variable lets you put anything in there, and in order for this to work it needs to be exactly the same across the board. This is case sensitive, make sure you get it right. Drag that programming line into the middle of the screen and make sure you indent it under the conditional that matches the video source. Repeat this for each video source. When you are all done, it should look like the screenshot below.

You will need to repeat this for audio as well if necessary. To do so you will go back to the very beginning and select “Audio Selection Changed” as opposed to “Video Selection Changed”.

Now, you have a String variable for each room that will track the source that is currently in use. There is one last thing left to do, and that is clear the variable out when the room is shut off. On Room Off I chose to replace the String variable with “None” as opposed to blanking it out, but I guess that is your choice. Just make sure you remember what you chose so you can keep it consistent, and program around it accurately.


Note that in the screenshot above the only programming relevant to this post is the setting of the variable to “None”.

Now that you have this in place there are all sorts of fun things you can do. You can have the LED on a certain six button keypad change colors to track what your kids are watching in their bedroom, if someone tries to use a video source currently being used in another room you can have an announcement play to warn the people in both rooms that they are sharing a source now, etc…

I am sure there are dozens more uses for this that I haven’t thought of yet, and I am anxious to hear about how you utilize this functionality. Please post a reply with how you will use it. That way we can all learn a little more =)

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Slashdot
  • StumbleUpon
  • Twitter

This past week, Control4 has announced End of Life status for its V2 10.5″ touchpanels, HC-500 controller, and the contact/relay extender. This means that no new orders are being accepted for these items, but the two year warranty is still in effect and honored should you buy one of these items from a dealer or already have one in service. If you bought from eBay, well you don’t get a warranty anyway. The transitions are to use the new 7″ panels, offered in Wireless, Tabletop, and In-wall varieties; the HC-200, 300, or 1000v3 controllers depending on your needs, and the new I/O extender if you need to bump up available serial connections, IR outputs, or contacts/relays in your project.

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Slashdot
  • StumbleUpon
  • Twitter

The idea here is that we are going to setup a button on our SR-250 remote to activate the sleep timer. If the button is pressed one time, it will set the sleep timer for 30 minutes. Two presses will set it for 45 minutes, and three presses for 60 minutes. Then, when there is 5 minutes remaining on the sleep timer, it will make an announcement warning you there is 5 minutes remaining. This way if you’re still awake and watching TV, you can increment the timer up allowing more time of TV viewing before the timer turns off. One press will give you 10 more minutes, two presses gives 20, and three presses gives 30.

First thing we should do is create all of our announcements. We are going to need an announcement for:
- Sleep timer set for 30 minutes
- Sleep timer set for 45 minutes
- Sleep timer set for 60 minutes
- Sleep timer 5 minutes remaining
- Sleep timer set for additional 10 minutes
- Sleep timer set for additional 20 minutes
- Sleep timer set for additional 30 minutes
- Sleep timer has been shut off

I create my announcements using a really cool beta program by AT&T. You can find that by clicking here. I personally use “Audrey UK English”, but toy around with the different voices and find the one you like the best.

Of course, you don’t have to use this service, any .wav file will do; you can even record yourself if you would like. Whatever suits you.

Once you have created all the .wav files necessary, in Composer under the “Agents” tab, click on “Announcements”. Click the “New” button, and name your announement. Make sure the name is discreptive because we are going to have quite a few when this is all said and done. Check the box in the middle of the screen that says “Play Audio File (.wav)”. Click the “Add” button and select the .wav file you just created for this announcement. Now, we need to tell it what room to play it in so we hit add room. In our case this sleep timer is for the Master Bedroom, but check whatever rooms are appropriate for you and hit okay.

Repeat this until all of the necessary announcements are created.

Now we will create the actual timers. You will need to create the following:
- Sleep Timer Master Bed 30 Minutes
- Sleep Timer Master Bed 45 Minutes
- Sleep Timer Master Bed 60 Minutes
- Sleep Timer Additional 10 Minutes
- Sleep Timer Additional 20 Minutes
- Sleep Timer Additional 30 Minutes
- Sleep Timer Last 5 Minutes

Now make sure when you setup these timers you set them up for 5 minutes less than the time shown/announced. This is because there is a seperate timer for the last 5 minutes. For example, the “Sleep Timer Master Bed 60 Minutes” will be a 55 minute timer.

Now we need to create two variables. One will be a Boolean Variable (true or false) which will allow the system to behave differently on the button presses based on whether the sleep timer is on the last 5 minutes, or bring set for the first time. We’ll call this variable “Master Bedroom Sleep Timer”. The second will be a Number Variable that will track the number of button presses for the multi-tap. We’ll call this variable “Master Bed Sleep Timer Multi Tap”.

Now that we have all that out of the way, we can start the programming. We are going to be using a button on the SR-250 to activate/utilize the sleep timer, but you could use any keypad or custom button as well. Under the programming tab select the room we are creating the sleep timer for. In this case it is the Master Bedroom. Under “Command Received” select the button you are going to be using; in the case “Blue Button”. Now, we need to increment the variable up with each press of that button, so move over to the “Device Actions” pane, scrool down, hit the plus sign next to “Variables”, and select our newly created “Master Bed Sleep Timer Multi-Tap” variable. In the bottom right corner select “+ 1″, and drag the programming line into the center of the screen.

Now we need to create all our programming based on the changing in the variable. This programming is extremely in depth, and a play by play walkthrough would probably be overkill at too much to read so we are going to rely on you having a little knowledge of Composer and using some of previous write-ups for the more in depth detail. Here is what the programming based on the changing variable looks like when you are all finished.

Now, you have the timers all setup to start based on the number of presses. Great. Now, we need to add the announcements to play when each timer begins. In “Device Events” (top right section of Composer under the Programming tab) scroll down and select “Timer”. In the drop down box below, select the first timer that has to do with our sleep timer programming. Select “When timer ‘xxxxxx’ has been started”. Now in the “Device Actions” pane (top right) scroll all the way down to announcements, and then select the appropriate announcement and drag that programming line into the middle of the screen.

Now repeat the step for each and everyone of the timers. When you get to the timer “Last 5 Minutes” you need to add one more line of programming. Remember if this timer is running we want the multi-taps to increment to different times, and we tell if this timer is running based on the Boolean Variable we created earlier. So we need to have it toggle that Boolean Variable to “True” when the timer is started, and “False” when the timer is stopped.

Now, we also need to go in and add programming telling the system what to do when each timer “expires”. This is very easy, because they all do the same thing! Which the exception of the timer “Last 5 Minutes”, they all “Reset Timer -> ‘Sleep Timer Last 5′ “.

Once you have set the expiration of every timer to start the timer for the last 5 minutes, we’re almost done! All we need to do know is tell the system what to do when that timer expires! This is the one that actually shuts the room off.

null

Now the sleep timer is all done and is functioning. I put one last thing in, and that is a way to turn the sleep timer completely off. I put this programming under the Red button on the SR-25, and it looks like this:

null

Any questions, feel free to ask in the comments!

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Slashdot
  • StumbleUpon
  • Twitter

New features in 1.8.2:

Multiple ZigBee Server support
The primary change in Release 1.8.2 is support for configuring multiple ZigBee Servers. This is
needed for those project installations where, due to construction materials or physical distance, it is
not possible to have a contiguous ZigBee mesh network. The ZigBee Pro architecture used by
Control4 allows for multiple ZigBee Access Points (ZAPs). Each ZAP must be able to join the mesh.
ZAPs join the mesh using their ZigBee radio, just like any of the ZigBee-only devices. If the Controller
running ZAP is out of radio range of the other nodes on the ZigBee mesh, then an additional ZigBee
Server can be created. Each ZigBee Server has a ZAP Coordinator and manages a separate mesh.
In the large majority of installs, a single ZigBee Server with multiple ZAPs (as needed) is preferable.
This allows devices, such as System Remote Controls, to move freely from location to location and
still be able to access the mesh. However, in locations where a single mesh is not possible, you can
now create one or more separate meshes to support these islands of ZigBee nodes.

Other New Features and Products
• IO Extender. This new hardware product was announced at CEDIA.
• Battery Level programming. These are implemented events on the SR-150/SR-250 System
Remote Control drivers such that they generate an event on wakeup when the battery levels
are low. This event can be used in Composer programming.
• Single Tap programming. Added a new event for single tap in the Keypad and
Dimmer/Switch drivers. This allows users using tap-count programming to avoid having to
use Press/Release events.

Defects Resolved and Other Changes in
Release 1.8.2

 

• Navigator -
Fixed focus issues with On-Screen Navigator, of various causes, including:
• IP Camera navigation
• Editing a playlist and removing the last track
• Deleting an album from My Library
• Saving a modified playlist

• iPod – Added an output parameter to the iPod proxy commands so that it can be used in
multi-proxy drivers (for example, a multi-zone receiver).
 

• Rhapsody -
Fixed a problem when a Rhapsody song ends/begins in one (1) session, and other
Rhapsody streams are briefly interrupted.
• Changed the timeout of Rhapsody searches to two (2) minutes to prevent locking up and
disconnecting Rhapsody search on Composers with a lot of content (e.g., Mozart,
Beethoven, etc.).

 

• System Remote Control- Fixed an issue where analog sources, including Dock for iPod,
were removed from the Zones page when the 4 button was pressed on the System Remote
Control.

 

• Zones. Fixed the Zones page to show the analog source when playing.

 

• Audio
• Resolved a problem where the audio server sends out a short packet that causes an
‘ASP Wrong version’ error. This would cause flac audio files not to play.
• Resolved a problem where the input streaming from Home Controller HC-200, HC-300,
and HC-500 inputs to a 7” Touch Screen audio output had ~200 milliseconds of delay.
• Resolved problems with audio playback where audio skips/drops when playing certain
flac files.
• Resolved a problem where the HC-200, HC-300, and HC-500 Primary Controllers could
not stream flac files due to insufficient CPU capacity.
• Improved network throughput and process prioritization on the HC-200, HC-300, and HC-
500 Controllers to improve audio streaming performance.
• Resolved a problem where the Audio Client process on the HC-200, HC-300, or HC-500
Controller was not correctly shutting down when directed to do so.
• Corrected the stereo audio output on the HC-200 Controller so that the left channel and
right channel aren’t switched.

 

• Keypads.
• Corrected a problem where a Keypad LED, if set to On, lost its color after a reboot.
• Enhanced the Keypad drivers to ensure that out of control ramping cannot occur from
missed Release events.

 

• Pools.

 Resolved reported problems with the Jandy pool driver.
• Modified the Jandy Pool lighting controls to use discrete on/off to match the functionality
of the pool Controller more closely.
• Resolved a problem where the Jandy Pool Auxiliary buttons text weren’t being linked up
with the correct text.
• Jandy Pool Controller heat cannot be turned on/off. Heat control is not available through
the control protocol. To enable or disable heat, you must change the heat setpoint. The
Jandy Controller will then turn on/off the heat as needed.
 

• Thermostat
• Enhanced Thermostat firmware for better maintainability and future expansion.
• Corrected the initial value of the Heat/Cool set points which were reported as “0″ after
Director was restarted.
• Changed the Control4 Thermostat driver so that CURRENT_TEMPERATURE variable is
read/write.
• Upgrading the Thermostat from a prior ZigBee Pro firmware version may cause the fan to
be set to the “Fan On” state.

Zigbee
• Updated ZigBee Pro firmware now supports the Load Profile functionality on standard
Dimmers.

 

• GE Concord Driver
• Resolved a problem with the GE Concord Security panel driver which resulted from
incomplete serial communications being incorrectly discarded. This caused the panel not
to work correctly in the Control4 system.
• Modified the ‘Arm to Home’ and ‘Arm to Away’ capabilities presented through the
interface not to use the ‘Quick Arm’ capability. This ensures that the individual changing
the system arming state has the necessary security code for access.

• Touch Screens.

Fixed a problem where the 7″ Portable Touch Screen would lock up if the
Suspend button was pressed before the device had fully powered up on a restore. The
device will not allow itself to suspend until it has been sufficiently restored to safely suspend.
• Battery-Powered Devices. Resolved the problem of messaging deadlock occurring on
polling end node (battery powered) devices which prevents firmware updates.

• Controllers.
• Fixed a problem where the I2C bus would lock up, causing the Component outputs not to
work on the HC-200, HC-300, and HC-500 Controllers.

• Other
• Fixed a display bug where Composer’s Watch and Listen Behavior ‘No Action’ reverts to
Show Device. The proper setting was stored but not correctly displayed.
• Added new and improved MechoShade drivers.
• Corrected the 1.8.x outlet module drivers to use multi-cast Lighting Scenes.
• Ensured that the relay state isn’t inverted if toggled before being changed to pulse type.
• Fixed issue where you couldn’t create more than three (3) email notifications.

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Slashdot
  • StumbleUpon
  • Twitter

“CytexOne has successfully worked with Sling Media to release an Official Control4 Driver. In case you haven’t heard, we spent many months working with Sling Media to create an Official Control4 Slingbox Driver. We’re all psyched about the outcome. We think a lot of dealers & customers are going to be very excited to have their entire Control4 system available anywhere in the world. Here is a link to the video: (make sure to turn the volume up!) ”

SlingBox / Control4 Integration by CytexOne from CytexOne on Vimeo.

And here’s a link to the instructions for hooking up your Slingbox Pro HD:
http://wiki.cytexone.com/display/pubdocs/SlingBox+Control4+Integration

Great work guys!

As seen here on the CytexONE blog:
http://blog.cytexone.com/cytexone-control4-slingbox-integration-public-0

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Slashdot
  • StumbleUpon
  • Twitter

The Carrier Infinity SAM drivers allow the Control4 system to work in conjunction with a Carrier Infinity
HVAC system. In order to communicate with the Carrier Infinity system, you must install a System
Access Module (SAM). While the SAM provides both serial and IP interfaces, only the serial interface
provides access to the control protocol. The IP interface is limited to a Web browser. Control4’s driver
utilizes the serial port.

The Control4 system on which you wish to have these drivers installed must be running Release 1.7.0 or later. If you’re not on 1.7.x, contact your dealer to see about an upgrade.

Each SAM is able to control two (2) systems. A Carrier Infinity Thermostat driver must be added for each Thermostat
on the system. Each SAM module can interface with up to two (2)Carrier Systems, and each system can
have up to eight (8) zones (Thermostats) for a total of 16 zones.

We’re working with a house now that has a Carrier Infinity system already installed by the builder, so we’ll check this out and give you a report back on how it works. Of course, the Carrier Infinity system is the same as the Bryant Evolution, so one should expect duplicate functionality.

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Slashdot
  • StumbleUpon
  • Twitter

38988DFA34BD410D882EB08BD7D6CF61

 

The IO Extender has been designed to provide flexible mounting options in a rack or on a wall. The included rack ears can be mounted facing the front or the rear of the unit so the device can be installed either in the front or rear of the rack, or it can be mounted directly on a wall or on a standard double-gang electrical box using the convenient keyholes on the bottom of the device.

Features:

· 8 IR Outputs
· 4 Serial Ports (DB9)
· 8 Contacts
· 8 Relays
· 10/100 BaseT Ethernet
· Flexible rack or wall mounting options

Control4® Limited Warranty: The IO Extender will carry the standard Control4® 2-year limited warranty.

MSRP: $399.00, The first shipments of the IO Extender is currently scheduled for December 4, 2009. System Software version 1.8.2 or greater is required to use the IO Extender.

Does the IO Extender have ZigBee?
No. The IO Extender communicates using Ethernet. ZigBee is designed as a control protocol and is normally not suitable to transmit large amounts of data. Due to the amount of IO available on the device and the potential bandwidth requirements to support all of the connected devices, ZigBee cannot be used reliably.

What are the dimensions of the IO Extender?
The IO Extender is a 1U device that is standard rack width. It is approximately 6.25″ deep. All of the IO connections are located on the back of the device. The same status LEDs on the front of the device are also found on the back to provide status even if the device is mounted with the rear facing outward.

Can the IO Extender be used on 1.7.X software releases?
No. The IO Extender is only supported on system software version 1.8.2 or greater.

What type of connector is used for the contacts and relays?
The contacts and relays use a pluggable terminal connector similar to those used on past and current products. However the connectors are slightly smaller to enable them all to fit in a 1U device. Connections using larger gauge wire can simply be made by inserting the wire in the connector. When using smaller gauge wires or when removing previously connected wires, you can depress the small tab above the connector hole with a small screwdriver to release the wire retention mechanism.

Can I use more than one IO Extender in a system?
Yes. Multiple IO Extenders can be added to and used in a Control4® system.

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Slashdot
  • StumbleUpon
  • Twitter
Proudly powered by WordPress. Theme developed with WordPress Theme Generator.
Copyright © The SOHO Shop Blog. All rights reserved.