how to use easy wave
Смотрите видео на тему «how to use easy wave» в TikTok (тикток).
259
dakor_coiffure1
Dak’or coiffure1
Лайки: 259.Видео в TikTok (тикток) от пользователя Dak’or coiffure1 (@dakor_coiffure1): «Répondre à @himandiaye0112 merci c’est trop gentil big bro ✌️ #pourtoi».How to use Easy curls and waves Buga (Lo Lo Lo) — Kizz Daniel & Tekno.
Buga (Lo Lo Lo) — Kizz Daniel & Tekno
557
mbuyelo_krack
Mbuyelo_krack
Hey Fam, here’s my #EasyCurls tutorial, basically how I style my waves using the @easywavessa twin pack.
The @easywavessa curl activator gel helps activate the curls and lay the hair down for the wavy look and the oil sheen comb out conditioner hairspray helps with the shine and can be used before and/or after applying the curl activator gel.
Лайки: 557.Видео в TikTok (тикток) от пользователя Mbuyelo_krack (@mbuyelo_krack): «Hey Fam, here’s my #EasyCurls tutorial, basically how I style my waves using the @easywavessa twin pack. The @easywavessa curl activator gel helps activate the curls and lay the hair down for the wavy look and the oil sheen comb out conditioner hairspray helps with the shine and can be used before and/or after applying the curl activator gel. Give it a try and let me know in the comment section . . . . . . . #easycurls #waversworldwide #360waves #180waves #SAMA28». love nwantinti (ah ah ah) — CKay.
love nwantinti (ah ah ah) — CKay
7759
aspynovard
aspynovard
Лайки: 7.8K.Комментарии: 45.Видео в TikTok (тикток) от пользователя aspynovard (@aspynovard): «Reply to @kkcaligur Reply to @kkcaligur How I did these easy waves with the new floral collection from @TheBeachwaver Use code ASPYN to save! #beachwaverpartner #beachwaverflorals».middle part | beachwaver dry shampoo & heat protectant | 1 inch beachwaver wand with 1 inch sections, rotating the iron away from your face | . hair tutorial Loose Change — Devin Kennedy.
Loose Change — Devin Kennedy
1600
xthuyle
XTHUYLE
Лайки: 1.6K.Видео в TikTok (тикток) от пользователя XTHUYLE (@xthuyle): «How to get Molly mae’s beachy waves! This @beauty_works jumper waver is the best! #beachywaves #hairtutorial #wavestutorial #mermaidhair #beautyworks #hairtok #easyhairstyles #easyhairtutorials».EASY BEACHY WAVES HAIR TUTORIAL | Apply a heat protection | Brush hair to distribution products and untangle hair | . original sound — XTHUYLE.
original sound — XTHUYLE
50
mane_____
@radiahfaraj shows us how to do ultra-easy waves using the Triple Ripple Waver just after a blow-out and a flat iron on her 3C hair. Don't forget the Ready or Knot Brush to make styling even simpler ✨
Лайки: 50.Видео в TikTok (тикток) от пользователя Mane (@mane_____): «@radiahfaraj shows us how to do ultra-easy waves using the Triple Ripple Waver just after a blow-out and a flat iron on her 3C hair. Don't forget the Ready or Knot Brush to make styling even simpler ✨ #wavyhair #wavyhairtutorial #hairtutorial #waverhairtool #wavertutorial #hairtok #jenatkin #maneaddicts #deepwavehair #hairhacks #hairwaver #beautymusthaves #indiesleazewaves #easywavyhair #goingouthair #grwm #3chair».Easy Going-Out Waves Using the Triple Ripple Waver | For a natural, relaxed wave, stay 5” off your roots and leave at least the last 2” of your hair length out | Don’t forget to keep the heat lower to keep the relaxed vibe ️ no other heart by mac demarco — rwn..
Easy wave как пользоваться программой
Программа EasyWave, которая была на CD (версия 1.1.1.25), не хотела работать под Windows 7 с прибором АКИП-3408/1 (это аналог SDG805 [1]), и выдавала ошибку «An unsupported operation was attempted» (попытка выполнить не поддерживаемую операцию).
Что нужно сделать:
1. Удалить старую версию EasyWave.
2. Скачать с сайта siglent.eu [2] последнюю версию. Я скачал EasyWave for SDG800/1000/5000 Current Version: V1.01.01.36 (Published:2017-09-22), файл Easywave_1.01.01.36_EN.zip.
3. После установки новой программы и подключения к прибору, как написано в руководстве (см. врезку), все заработало нормально.
1. Сначала нужно установить пакет NI-VISA, который следует скачать с сайта National Instruments (для закачки требуется регистрация). Это файл установщика наподобие NIVISA1700full.exe, размером порядка 767 мегабайт. Установка проблем не вызывает. Выполните все шаги, которые просит от Вас мастер установки (путь установки, выбор устанавливаемых пакетов, принятие условий лицензии).

На этапе установки пакетов (см. скриншот) можно оставить все по умолчанию, как это рекомендует руководство по установке, но я на всякий случай выбрал «устанавливать все».
Примечание: если Вы не хотите устанавливать весь набор инструментов NI-VISA, то устанавливайте только NI-VISA runtime engine, что позволит экономить место на диске. Однако если Вы собираетесь сами писать программы на основе API NI-VISA, то устанавливайте пакет NI-VISA полностью.
По окончании установки понадобится перезагрузить компьютер.
2. Установите программу EasyWave. Просто запустите для этого установщик EasyWave_setup.exe, выполните все шаги по установке.
3. Подключите АКИП-3408/1 к компьютеру через USB. Запустите программу EasyWave. Для подключения к прибору зайдите в меню Communication -> Read wave. Откроется диалог настройки подключения к прибору (Device connect setting).

Выберите вариант USBTMC, кликните OK.
4. Следующее окно диалога (Read wave) предложит выбрать устройство из выпадающего списка Device List. Скорее всего там будет только один выбор, так что ничего выбирать не нужно, просто нажмите на кнопку Read wave.

Произойдет подключение к прибору, и программа прочитает форму сигнала из прибора. Нажмите Cancel в диалоге Read wave. Программа EasyWave готова к работе с АКИП-3408/1.
Custom waveforms using EasyWave and CSV Templates
Arbitrary waveform generators (AWGs) are programmable voltage sources. They can be extremely useful tools when your application requires the output of waveforms that contain complicated features or shapes. Many AWGs come pre-loaded with arbitrary waveforms like cardiac, voice, and a host of trigonometric functions. These “built-in” waveforms can be useful, but the real power of an AWG is the ability to build custom waveforms.
In many cases, AWGs have basic software packages that allow you to create and edit simple waveforms by applying simple mathematics to basic wave shapes like Sine or Square waves. This technique is useful when you are building composite waveforms using basic shapes or if you wish to “hand draw” a waveform, but what if you want to create or edit a more complicated waveform?
Most AWGs can be programmed directly using a remote computer connection, USB or Ethernet connection from the computer to the instrument, and a software package that can communicate to the instrument. Some common programs include.NET, Python, and LabVIEW. While this configuration is extremely powerful, it is cumbersome to develop quickly. To send a custom arbitrary waveform you need to build the application and deal with formatting the arbitrary waveform before you can get actually start using the AWG for the intended application.
In this application note, we are going to describe a simple method of creating a custom arbitrary waveform by creating a Comma Separated Variable (CSV) template, edit and save the CSV file, and finally how to transfer the CSV file to a SIGLENT SDG2000X series arbitrary waveform generator. The theory can then be applied to any generator that has a similar arbitrary waveform generator software package.
Create an EasyWave Template
The SIGLENT SDG series of arbitrary waveform generators work with the EasyWave software package.
- To begin, download and install the EasyWave package that matches your generator. This can be found on your favorite SIGLENT website (www.siglenteu.com)
You can also download a PDF and example Excel templates here: EasyWaveCSV
- Open EasyWave by clicking on the EasyWave desktop icon:

- Here is the EasyWave user interface

- Create a new waveform by clicking on Edit > New

- Enter the waveform name, instrument (if SDG2000X), and waveform parameters in the next window:

NOTE: Set the number of samples based on the resolution and the output sample rate that your application requires. A good starting point is to use 10 data points for the shortest feature you wish to create.
Keep in mind that more data points will deliver higher resolution in the time domain. This will then determine the overall output sample rate for the waveform. Once you have set the sample rate, you can then determine the number of points required to create your waveform.
For example, if the smallest feature of a waveform is a 10 us pulse, and you use 10 points to reproduce it, then the sample rate must be set to 1us/point.
10 us/10 point= 1 us/point
If you need 10 ms of total waveform length, then the waveform requires 10,000 points:
10 ms/(1 us/point) = 10,000 points
The SDG2000X is the only SIGLENT AWG that has flexible memory depth at this time.
- Now, the waveform edit window opens and shows a simple DC waveform centered at 0 V.

- Save the file as a CSV by pressing File > Save As > set the file location and name. If you are using an SDG2X, you can also directly open the SDG2X template file that is available with this application note

Editing an EasyWave Template
Once you have saved a template as a CSV, you can edit and reuse it anytime you need to create a new waveform.
- Open the template file using a CSV capable spreadsheet program like Microsoft Excel©. You can edit the data length, frequency (Hz), amplitude (Volts), offset (Volts), and phase values (degrees) in the file. Note that the data length cannot be easily changed on the front panel of the instrument.You can edit the data manually, or use a program like Mathematica or Matlab to write to the template cells directly.
The actual voltage values in column B represent the true output value of the instrument. If the instrument output is set lower than the maximum value in the value list, all output data will be scaled to the instrument setting.

- After you have built the waveform, save the Excel file as a CSV. Use a specific name to indicate the waveform type and output sample rate or another useful identifier.
NOTE: There are some things to keep in mind when creating your waveform:
1. The data format in each field must match the parameter for your instrument requirements. For example, the SDG2X has 16-bit amplitude resolution, but other models have 14-bits.
216 = 65,536 counts 214 = 16,384 counts
For a 16-bit generator with a 20 Vp-p waveform amplitude, the minimum voltage step size is given by the following:
20 V/65,536 = 3.0518E-4 V
For a 14-bit generator with a 20 Vp-p waveform amplitude, the minimum voltage step size is given by the following:
20 V/16,384 = 1.2207E-3 V
2. Use the exponential or long version of the data as shown below:

3. The data length value (cell B1) must match the total number of points in the column labeled value that starts at column B, row 14.
Using an EasyWave CSV File
After editing and saving your waveform, you can recall it into EasyWave and verify the output using an oscilloscope. AWGs are very flexible and easy-to-use, but visual verification is recommended to ensure that the output is correct before you connect the AWG to your circuit.
- Power on the SDG and connect the USB or Ethernet cable to the controlling remote computer
- Start Easywave and open the CSV file that you wish to download to the instrument by pressing File > Open as shown below:

- Verify that the waveform shape matches your expected output. Remember, you can adjust the amplitude and frequency on the AWG if either are not correct.
If the waveform is correct, download the wave by selecting Communication > Send Wave > and select USBTMC for USB or enter the IP address for LAN/Ethernet communications to the instrument:

- Select the channel that you wish to control and press send

- Verify and, if needed, adjust the output voltage and frequency/sample rate by connecting the AWG to an oscilloscope
Here is an example in Excel in which we manually built a function with sweeping amplitude and frequency Haversines.
First, the Haversine waveform:

Haversine(x) = sine2(x/2)
You can build a column of data in Excel that represents a single Haversine function. Next, you can create the sweep by adding multipliers to the amplitude and frequency portions of the Haversine function:
In this example, we use this technique to build a sweep with increasing amplitude and decreasing frequency, as shown below:

Once we have built the column of data, simply open the CSV template, copy-and-paste the column of new data into the CSV template, adjust the template data points to match the new data length, and save the file as a CSV with a new name.
Reopen the new CSV using EasyWave and verify that it matches the application:

Now, download the file to the instrument. The front panel of the AWG will indicate that the waveform is an ARB and will have a picture representing the new waveform on the front panel:

Connect the AWG channel to an oscilloscope and verify that it meets the application requirements. You can adjust the waveform amplitude, frequency, Arb Mode, and other features from the front panel of the AWG if it requires fine-tuning.
Помічник
Эта прекрасная программа сейчас доступна на самых популярных платформах — и на iOS, и на Android. Для первой категории все понятно: обладатель iPhone может расслабиться, так как ему недоступны сторонние ресурсы.
В свою очередь, владелец условно-китайского смартфона должен искать программу исключительно в Play Market. Только там. ТОЛЬКО ТАМ. Не на сайте «лучшие_программы.ru», а на официальном сервисе.
Сразу предупредим вас о крутости и небольшой ошибке. Начнем с лучших моментов – вы не поверите, но стоящих аналогов у приложения нет. Главным преимуществом является столичный транспорт, оснащенный GPS-трекерами. Да-да, это те зеленые точечки на карте.
Теперь о неприятном: есть небольшая ошибка, которая время от времени появляется в приложении. При первом запуске геолокация смещается в Германию. Это достаточно смешно, но для того, чтобы программа заработала как надо, нужно просто перезапустить ее.
Этот шаг зависит от того, планируете ли вы пользоваться программой в будущем. Если Easy Way понадобился исключительно на одну поездку (допустим, вы не знаете какой-нибудь район), можете запускать приложение и выбирать «использовать онлайн».
Если же удалять программу вы не собираетесь, смело нажимайте «скачать карту офлайн». Да, это будет стоить места на смартфоне, зато вы не будете зависеть от качества связи и других форс-мажоров.
Интерфейс программы весьма прост. Названия интуитивно доступны: к примеру, вы легко найдете вкладку «Маршруты». Как вы уже догадались, там Easy Way покажет расписания и направления того или иного троллейбуса.
В другой вкладке можно подсмотреть, где сейчас находится транспортное средство, которое вы ждете. Особенно актуально для опаздывающих или страдающих от непогоды людей — узнав, что троллейбус будет нескоро, вы укроетесь от дождя/снега/метеоритов в магазине, и точно не пропустите свою отправку.
Карта в Easy Way – настоящий кладезь полезной информации. Если вы плохо разбираетесь в городских джунглях, она запросто поможет проложить маршрут, срезав расстояние до ближайшей остановки. Тонкая линия на дисплее не даст убежать куда-то в сторону.
К слову, очень удобная штука. Однажды автор этой статьи замерз, ожидая троллейбус, и просто пошел за ним по карте. Оказалось, водитель остановился покурить в 300 метрах от остановки. Не зря проезд подорожал.
Чем хорош Easy Way – это способностью обучить вас нужным номерам маршрутов. Приложение покажет наиболее комфортные маршруты, вариации с пересадками и прочие нюансы. Особенно полезным этот момент будет для киевлян, плохо запоминающих номера транспортных средств, или постоянно путающими маршруты.
В этом случае приложение выполняет роль репетитора современной жизни. Ходите, ездите, учитесь, усваиваете информацию на практике. Если вскоре понадобится ехать на Виноградарь, хотя вы даже не знаете, что это такое – пожалуй, спасет только приложение.
Если сравнивать Easy Way с Google Maps, разница очевидна. У программы, которую мы сейчас разбираем, с батареей контакт идет явно по лучшему сценарию. Результат подтвержден зимними морозами, когда EW умудрялся показать нужные подсказки, при этом практически не обнулив батарею смартфона. Увы, сервисы Google этим похвастать не могут.
Да-да, если вас удивляет сравнение, попробуйте осознать: многие люди реально пытаются найти условный троллейбус на Google Maps. Зачем – сами не понимаем.
Здесь все просто: мы были бы рады посоветовать альтернативу, но ее нет. Другие приложения либо не работают с картой, либо не дружат с расписаниями маршрутов, либо вовсе выдают ошибку при запуске.
В данный момент (01.08.2018) замены нет. Так что советуем приобщиться к прекрасному и не тратить время на мучения с Google Maps. Не заставляйте эту прекрасную программу делать вещи, которые она делать не умеет.
Пока что они недоступны при работе с картами — частные перевозчики не спешат вешать на свои транспортные средства GPS-передатчики.
Но можно выкрутиться, узнав нужный маршрут в Easy Way. Стоит использовать дублированные номера маршруток и троллейбусов/автобусов, это оптимизированный лайфхак с многолетней историей.
Пока Hyperloop живет только в наших фантазиях, в поле зрения попадают лишь маршрутки, автобусы, трамваи и троллейбусы с метро. Так что мечтать лучше перед сном, а днем — пробивать правильную дорогу с хорошим навигатором.
Saved searches
Use saved searches to filter your results more quickly
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
Easy WAVE file handling for Nim
License
johnnovak/easywave
Name already in use
- Local
- Codespaces
Use Git or checkout with SVN using the web URL.
Work fast with our official CLI. Learn more about the CLI.
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
Work in progress, not ready for public use yet!
easyWAVE is a native Nim library that supports the reading and writing of the most common subset of the WAVE audio file format. Only uncompressed PCM data is supported (which is used 99.99% of the time in the real world). The library does not abstract away the file format; you’ll still need to have some understanding of how WAVE files are structured to use it.
The WAVE format is not complicated, but there are lots of little details that are quite easy to get wrong. This library gives you a toolkit to read and write WAVE files in a safe and easy manner—most of the error prone and tedious stuff is handled by the library (e.g. chunk size calculation when writing nested chunks, automatic padding of odd-sized chunks, transparent byte-order swapping in I/O methods etc.)
- Reading and writing of 8/16/24/32-bit integer PCM and 32/64-bit IEEE float PCM WAVE files
- Reading and writing of markers and regions
- An easy way to write nested chunks
- Support for little-endian (RIFF) and big-endian (RIFX) files
- Works on both little-endian and big-endian architectures (byte-swapping is handled transparently to the client code)
- Native Nim implementation, no external dependencies
- Released under WTFPL
- No support for compressed formats
- No support for esoteric bit-lengths (e.g. 20-bit PCM)
- Can only read/write the format and cue chunks, and partially the list chunk. Reading/writing of any other chunk types has to be implemented by the user.
- No direct support for editing (updating) existing files
- No «recovery mode» for handling malformed files
- Only file I/O is supported (so no streams or memory buffers)
The best way to install the library is by using nimble :
Reading WAVE files
Reading WAVE files is accomplished through WaveReader objects. A WaveReaderError will be raised if an I/O error was encountered or if the WAVE file is invalid.
Just call parseWaveFile() with the filename of the WAVE file. You can set the readRegions option to true if you’re interested in the markers/regions stored in the file as well.
This method will:
Parse the WAVE file headers and the format chunk ( «fmt » ). Information about the sample format will be available via the endianness , format , sampleRate and numChannels properties.
Find all chunks in the file and store this info as a sequence of ChunkInfo objects in the chunks property. The size of the sample data in bytes will be available through the dataSize property.
If readRegions was set to true , try to read marker and region info from the cue ( «cue » ) and list chunks ( «LIST» ).
Set the file pointer to the start of the sample data in the data chunk ( «data» ).
A simple example that illustrates all these points:
Reading single values or chunks of data from the file is accomplished through the various read* methods. See the API docs for the full list. It’s your responsibility to ensure that you read the sample data with the appropriate read method; there’s nothing stopping you from reading 16-bit integer data as 64-bit floats, for example, if that’s what you really want
While the above basic usage pattern would be probably sufficient for most use cases, you can do the reading fully manually by calling the low-level read methods.
The below code is an example for that; it approximates what parseWaveFile() is doing, minus the error checking. Consult the API docs for the list of available functions.
Writing WAVE files
Similarly to reading, writing WAVE files is accomplished through WaveWriter objects. A WaveWriterError will be raised if an I/O error was encountered or if you tried to perform an invalid operation (e.g. writing to a closed file, attempting to write data between chunks etc.)
Creating a WAVE file
To create a new WAVE file, a WaveWriter object needs to be instantiated first:
Note that this will only create the file and write the master RIFF chunk ( «RIFF» ) header.
Writing the format chunk
You’ll need to explicitly call writeFormatChunk() to write the actual format information to the file in the form of a format chunk ( «fmt » ). This gives you the flexibility to optionally insert some other chunks before the format chunk.
Writing markers and regions
To write markers and regions to the file, you’ll need to descibe them as a table of values where the keys are the marker/region IDs (32-bit unsigned integers unique per marker/region) and the values Region objects. Markers are defined simply as regions with a length of zero.
Note that the start positions and lengths of the markers/regions need to be specified in sample frames—these are not byte offsets! (1 sample frame = N number of samples, where N is the number of channels)
writeRegions() will technically create two new chunks right next to each other:
- A cue chunk ( «cue » ) containing the IDs and the start offsets of the cue points (markers)
- A list chunk ( «LIST» ) containing label ( «labl» ) and labeled text ( «ltxt» ) sub-chunks to store the labels and region lengths of the markers/regions, respectively
The list chunks allows lots of other types of information to be stored in its various sub-chunks. If you need to store such extra data, you cannot use writeRegions() ; you’ll need to implement your own list chunk writing logic.
Writing the data chunk and other chunks
To write any other other chunks types, you’ll need to do the following:
Call startChunk(«ABCD») , where «ABCD» is the 4-char chunk ID (FourCC). startDataChunk() is a shortcut for creating the data chunk ( «data» ).
Use the various write* methods to write the data (see the API docs for the full list). Byte-order swapping will be handled automatically depending on the CPU architecture and the endianness of the file. You need to ensure that you use the correct write method variant for the particular sample format you’re using.
When you’re done, call endChunk() to close the chunk. This will pad the data automatically with an extra byte at the end if an odd number of bytes have been written so far, and it will update the chunk size field in the chunk header.
Chunks can be nested; the library will make sure to calculate the correct chunk sizes for all parent chunks.
Bear in my mind that it is invalid to write data «between chunks»—an error will be raised if you tried to write some data after ending a chunk but before starting a new one.
Closing the file
Finally, the endFile() method must be called to update the master RIFF chunk with the correct master chunk size. This will also close the file.
Handling 24-bit data
The library provides two ways to deal with 24-bit data:
As packed data: readData24Packed() and writeData24Packed() treat 24-bit data as a continuous stream of bytes (as they actually appear in the file). The first sample is bytes 1, 2 and 3, the second sample bytes 4, 5 and 6, and so on. Because of this, the size of the buffer used with these two methods must be divisable by three, otherwise an assertion error will be raised at runtime. The read and write methods only perform byte-order swapping, if necessary.
As unpacked data: readData24Unpacked() and writeData24Unpacked() treat 24-bit data as a stream of 32-bit integers. The read method unpacks the packed data from the file into a stream of 32-bit integers (with the most significant byte set to zero), while the write does the opposite.
It is important to stress out that the data will be always written to the WAVE file in packed form—it’s just sometimes more convenient to deal with 32-bit integers than with packed data, hence the two different methods.
Some general notes about WAVE files
Little-endian WAVE files start with the «RIFF» master chunk ID, big-endian files start with «RIFX» . Apart from the byte-ordering, there are no differences between the two formats. The big-endian option is not really meant to be used when creating new WAVE files; I just included it because it made the testing of the byte-swapping code paths much easier on Intel hardware. Virtually nothing can read RIFX files nowadays, it’s kind of a dead format.
The only restriction on the order of chunks is that the format chunk must appear before the data chunk (but not necessarily immediately before it). Apart from this restriction, other chunks can appear in any order. For example, there is no guarantee that the format chunk is always the first chunk (some old software mistakenly assumes this).
All chunks must start at even offsets. If a chunk contains an odd number of bytes, it must be padded with an extra byte at the end. However, the chunk header must contain the original unpadded chunk length in its size field (the writer takes care of this, but this might surprise some people when reading files).
This work is free. You can redistribute it and/or modify it under the terms of the Do What The Fuck You Want To Public License, Version 2, as published by Sam Hocevar. See the COPYING file for more details.
Модуль easy wave для управления окружающей средой
Мобильное приложения для управления умным домом на базе Z-Wave с помощью OpenRemote

Не так давно был представлен Z-Wave модуль для Raspberry Pi — RaZBerry, который превращает мини-компьютер в полноценный контроллер умного дома. Управление Z-Wave сетью осуществляется с помощью web-интерфейса, использующего HTTP/JavaScript API. Используя JavaScript можно создать набор функций для автоматизации (включение/выключение света, проверка температуры, опрос датчика движения и др.), которые затем можно выполнить, послав HTTP запрос.
Продукт компании OpenRemote с одноименным названием позволяет создавать мобильные приложения для умного дома без программирования, при этом в одном приложении могут использоваться разные технологии: Z-Wave, KNX, X10, ZigBee, управление компьютером по ssh и др.
OpenRemote это сервер выполняющий любые команды и конструктор интерфейсов в котором вы создаете кнопки, переключатели, надписи и др. и этим элементам уже назначаете команды, в нашем случае это HTTP запросы на выполнение JavaScript функций на сервере Z-Wave.
Далее я по пунктам расскажу как создать пульт управления умным домом для iPhone и Android! А вот так будет выглядеть наше приложения, когда мы закончим: 
1. Создание сети Z-Wave c помощью контроллера Raspberry Pi + RaZberry
- Установка ПО RaZberry на Raspberry Pi
- Добавление Z-Wave устройств
- Проверка работы устройства
- О предоставленном API автоматизации
- Создание JS скриптов для удаленного управления
2. Установка OpenRemote контроллера и мобильного приложения
3. Создание дизайна приложения и логики его работы
- Разработка дизайна
- Создание команд управления и сенсоров
- Ассоциация кнопок с командами
- Синхронизация с мобильным приложением
Создание сети Z-Wave c помощью контроллера Raspberry+RaZberry
RaZberry — это плата подключаемая к Raspberry Pi через GPIO, позволяющая создавать и управлять Z-Wave сетью. Для лучшего понимая прочтите Faq. В комплекте с платой идет софт, который нужно установить.
Установка ПО RaZberry на Raspberry
Установщик поддерживает только Debian-based дистрибутивы (Raspbian, Xbian и др.) Однако ручками можно поставить ПО и на OpenElec и другие ОС.
Выполните команду для установки ПО Z-Way:
После установки, нужно обязательно перезагрузить Raspberry Pi, чтобы применить изменения для Serial порта.
Чтобы попасть в панель управления умным домом перейдите по адресу http://IP_OF_YOUR_RASPBERRY:8083. Интерфейс программы очень простой, разобраться в нем не составит труда, есть документация. Максимальную совместимость с интерфейсом имеют браузеры: Chrome, Safari, Firefox, другие браузеры: IE, Opera могут работать некорректно.
Добавление Z-Wave устройств
Определимся со списком используемого оборудования:
— Реле Fibaro Single Switch 3kW 2 шт.
— Датчик открытия двери/окна и температуры Fibaro Door/Window Sensor 1шт.
В нижнем меню выберите Режим эксперта. С помощью верхнего меню перейдите на вкладку Сеть → Управление сетью и нажмите Включить (заново) устройство, это запустит процесс ожидания включения устройства в сеть, теперь на устройстве три раза нажмите сервисную кнопку, чтобы контроллер его увидел и добавил. 
Проверка работы устройства
Убедимся, что устройство работает. Перейдите на вкладку Настройка устройств, кликните на только, что добавленное устройство в левой колонке и проверьте Стадию интервью, должно быть Интервью прошло успешно и между плюсиков не должно быть точек и заков Ø. 
Если интервью не пройдено (есть точки и знаки Ø), то можно его повторить, для этого в нижней части экрана нажмите Дополнительные действия → Принудительно повторить интервью (Режим эксперта должен быть включен, чтобы увидеть это меню).
После успешно пройденного интервью, на этой же вкладке Настройка устройств можно настроить некоторые параметры устройства (не забудьте применить настройки кнопкой Применить настройки к данному устройству внизу экрана, а также разбудить устройство, если оно работает на батарейках): 
Для управления устройством перейдите на вкладку Управление устройствами → Выключатели 
О предоставленном API автоматизации
Удостоверившись, что все устройства работают правильно, попробуем теперь управлять ими удаленно. Есть несколько способов:
1. С помощью HTTP/JSON API
2. C помощью JavaScript API
HTTP/JSON API использует простой синтаксис для управления устройствами.
Включить свет можно из браузера:
Или запросить температуру:
JavaScript API позволяет писать различные скрипты автоматизации, например: включить/выключить свет, опросить датчик, получить температуру, выключить свет через 2 минуты после включения. Эти скрипты могут работать как самостоятельно (например: ночью свет включается только на 15%, чтобы не слепить глаза), так и могут быть вызваны удаленно с помощью HTTP/JSON API.
Вызов скрипта включения света:
К сожалению прямое обращение к устройствам с помощью HTTP/JSON API из OpenRemote проблематично по нескольким причинам:
1. Символы [] должны быть перекодированы в UTF-8 в Констукторе OpenRemote
2. При опросе датчиков OpenRemote ожидает «on» или «off», а Z-Wave датчики могут прислать 255 или 0.
3. Для каждого устройства придётся писать свой запрос, а с помощью JS можно использовать только одну функцию для включения различных устройств, изменяя в запросе только параметр функции — номер устройства.
При использовать JavaScript API все эти проблемы исчезают — несколько функций «хэлперов» помогут преобразовать термины Z-Wave в удобные для OpenRemote понятия.
Более подробно о синтаксисе HTTP/JSON API и JavaScript API можно почитать в недавней статье о RaZberry на хабре.
Создание JS скриптов для удаленного управления
JS скрипты находятся в /opt/z-way-server/automation/, создадим файл в котором будут храниться наши функции автоматизации openremote.js, чтобы он автоматически загружался при включении Z-Way, в конец главного файла автоматизации main.js добавьте:
Параметр N — номер устройства в сети.
Параметр I — внутри одного устройства может быть физически несколько устройств (каналов), например 2 реле или датчик температуры, датчик движения, датчик освещенности. Параметр I это номер канала внутри устройств. Если устройство содержит только одно физическое устройство, то это параметр равен 0.
После создания файла нужно либо перезапустить Z-Way командой:
либо подгрузить скрипт вручную, послав запрос из браузера:
Проверить работоспособность функций можно из браузера.
Включить свет:
В отладке очень хорошо помогает лог Z-Way сервера:
Если все работает, переходим к следующему пункту!
Установка OpenRemote контроллера
Контроллер OpenRemote представляет из себя сервер, который получает команды от мобильного или веб приложения и дальше транслирует их другому контроллеру или серверу. В нашем случае это Z-Way сервер. 
На сайте OpenRemote есть очень подробная инструкция по установке, которой и предлагаю воспользоваться:
Официальная инструкция по установке OpenRemote на английском языке
Замечу лишь, что OpenRemote написан на Java и нам нужна версия виртуальной машины с аппаратной поддержкой плавающей запятой:
JAVA для ARM процессоров в поддержкой плавающей запятой
Установите мобильное приложение для вашего телефона:
Мобильное приложение OpenRemote
Перед тем как приступить к разработке приложения, для лучшего понимая посмотрите как оно будет работать: 
Создание дизайна приложения и логики его работы
Все предыдущие шаги были лишь подготовкой к главному — созданию мобильного приложения!
Откройте облачный Конструктор http://designer.openremote.org. Разобраться в нем не составит труда!
Разработка дизайна
Сразу перейдем к разработке дизайна.
1. Перейдите на вкладку UI Designer и создайте новую панель, назвав ее например, iPhone4. 
2. Перетяните из правой панели кнопки и изображения на экран iPhone. 
3. В свойствах изображения (правая панель) загрузите ваши картинки и с помощью полей Left, Right, Width, Height расположите их на экране как вам нужно. Я загрузил изображения квадрата и лампочки, также добавил надпись. 
Создание команд управления и сенсоров
Теперь нужно на кнопки назначить команды, а картинка лампочки должна изменяться в зависимости от состояния света (включен/выключен).
1. Перейдите на вкладку и создайте новый девайс, назвав его например, Raspberry. 
2. Выберите только что созданный девайс Raspberry и создайте новую команду для него New → New command. Выбираем протокол HTTP, вводим URL JS-команды и метод устанавливаем POST.
Эта команда включает устройство №6. Аналогично создаем команды включения других устройств и команды выключения.

3. Теперь нужно создать команду для опроса состояния света. Это команда будет вызываться каждые 2 секунды, поэтому если вы вручную выключите свет, то в нашем приложении это сразу станет заметно. Как обычно New → New command, но дополнительно нужно указать с какой периодичность проводить опрос Polling, устанавливаем 2s, буква s обязательна. 
4. Создадим Sensor, который будет обрабатывать полученные значения от этой команды и передавать их изображению или надписи. New → New Sensor, выбираем команду, которую будет выполнять сенсор, устанавливаем тип custom, добавляем два состояния on и off, ассоциируем их с возвращаемыми значениями Z-Wave. 
Ассоциация кнопок с командами
1. Последний этап разработки приложения, ассоциация кнопок с командами. Вернитесь к дизайнеру приложения UI Designer , выберите вашу кнопку и в её свойствах установить команду, которую она должна выполнять. 
2. Ассоциируйте изображение с сенсором, чтобы при изменении состояния устройства изменялась и картинка в приложении. Выберите изображение и в его свойствах установите сенсор. 
3. В свойствах изображения выберите какая картинка будет показана если сенсор прислал on и какая, если сенсор прислал off. 
Синхронизация с мобильным приложением
1. Наше приложение готово, осталось его только залить в телефон. Перейдите по адресу контроллера OpenRemote http://OpenRemoteServer:8080/controller/, и нажмите Sync with Online Designer, тем самым вы загрузите созданное приложение на контроллер OpenRemote. 
2. По адресу http://OpenRemoteServer:8080/webconsole/ можно увидеть наше готовое приложение. 
3. Откройте приложение OpenRemote на мобильном, задайте адрес сервера OpenRemote, выберите панель iPhone4, которую мы создали в UI Designer. 
4. Теперь можно протестировать приложение на мобильном, я продолжил разработку дальше, добавил датчик температуры, датчик открытия окна, и сделал панель для управления медиаплеером XBMC. 
Резюме
На изучение OpenRemote и разработку приложения я затратил один день! Этот инструмент очень прост в освоении, что экономит время. OpenRemote дает безграничные возможности по автоматизации дома, объединяя различные протоколы под одним крылом, а RaZberry оказалось очень удачным решением для управления оборудованием Z-Wave из OpenRemote.