<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://tech.realexposer.com/feed.xml" rel="self" type="application/atom+xml" /><link href="https://tech.realexposer.com/" rel="alternate" type="text/html" /><updated>2024-12-10T13:26:10+00:00</updated><id>https://tech.realexposer.com/feed.xml</id><title type="html">Tech RealExposer</title><subtitle>An amazing website.</subtitle><author><name>Real Exposer</name></author><entry><title type="html">Brew</title><link href="https://tech.realexposer.com/blog/Brew/" rel="alternate" type="text/html" title="Brew" /><published>2024-11-28T19:34:30+00:00</published><updated>2024-11-28T19:34:30+00:00</updated><id>https://tech.realexposer.com/blog/Brew</id><content type="html" xml:base="https://tech.realexposer.com/blog/Brew/"><![CDATA[<p>In this post, I list some of the important Brew commands</p>

<h1 id="global-commands">Global commands</h1>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>brew outdated  <span class="c"># shows outdated packages</span>
</code></pre></div></div>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>brew doctor	 <span class="c"># Diagnose brew issues</span>
</code></pre></div></div>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>brew update     <span class="c"># update brew and cask</span>
</code></pre></div></div>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>brew upgrade     <span class="c"># update all outdated packages</span>
</code></pre></div></div>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>brew list	<span class="c"># List installed</span>
</code></pre></div></div>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>brew outdated	<span class="c"># What’s due for upgrades?</span>
</code></pre></div></div>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>brew deps <span class="nt">--tree</span> <span class="nt">--installed</span>  <span class="c"># Display the dependency tree</span>
</code></pre></div></div>
<h2 id="installing-a-particular-version-of-a-package">Installing a particular version of a package</h2>
<p>All the cask files are located at <code class="language-plaintext highlighter-rouge">/usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask/Casks</code></p>

<p>Open the one you want to chagne and modify the “version” ans “sha256”</p>

<p>Uninstall the unwanted package and install again</p>

<h1 id="package-commands">Package commands</h1>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>brew <span class="nb">install </span>git	<span class="c"># Install a package</span>
</code></pre></div></div>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>brew uninstall git	<span class="c"># Remove/Uninstall a package</span>
</code></pre></div></div>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>brew upgrade git	<span class="c"># Upgrade a package</span>
</code></pre></div></div>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>brew <span class="nb">unlink </span>git 	<span class="c"># Unlink</span>
</code></pre></div></div>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>brew <span class="nb">link </span>git	<span class="c"># Link</span>
</code></pre></div></div>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>brew switch git 2.5.0	<span class="c"># Change versions</span>
</code></pre></div></div>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>brew list <span class="nt">--versions</span> git	<span class="c"># See what versions you have</span>
</code></pre></div></div>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>brew info git	<span class="c"># List versions, caveats, etc</span>
</code></pre></div></div>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>brew cleanup git	<span class="c"># Remove old versions</span>
</code></pre></div></div>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>brew edit git	<span class="c"># Edit this formula</span>
</code></pre></div></div>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>brew <span class="nb">cat </span>git	<span class="c"># Print this formula</span>
</code></pre></div></div>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>brew home git	<span class="c"># Open homepage</span>
</code></pre></div></div>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>brew search git	<span class="c"># Search for formulas</span>
</code></pre></div></div>
<h1 id="bew-cask-commands">Bew cask commands</h1>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>brew <span class="nb">install</span> <span class="nt">--cask</span> virtualbox <span class="c"># cask install package</span>
</code></pre></div></div>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>brew uninstall <span class="nt">--cask</span> virtualbox <span class="c"># cask uninstall package</span>
</code></pre></div></div>

<p>Source: https://devhints.io/homebrew</p>]]></content><author><name>Real Exposer</name></author><category term="blog" /><category term="macos" /><summary type="html"><![CDATA[In this post, I list some of the important Brew commands]]></summary></entry><entry><title type="html">Esphome</title><link href="https://tech.realexposer.com/ESPHome/" rel="alternate" type="text/html" title="Esphome" /><published>2024-11-03T00:00:00+00:00</published><updated>2024-11-03T00:00:00+00:00</updated><id>https://tech.realexposer.com/ESPHome</id><content type="html" xml:base="https://tech.realexposer.com/ESPHome/"><![CDATA[<h1 id="esp32">ESP32</h1>
<p><img src="/assets/images/ESP32-38-PIN-DEVBOARD.png" alt="Image" /></p>

<h1 id="tft-18-display---st7735">TFT 1.8” display - ST7735</h1>
<p>The ST7735 TFT display is a 1.8″ display with a resolution of 128×160 pixels and can display a wide range of colors ( full 18-bit color, 262,144 shades!). The display uses the SPI protocol for communication and has its own pixel-addressable frame buffer which means it can be used with all kinds of microcontroller and you only need 4 i/o pins. To complement the display, it also comes with an SD card slot on which colored bitmaps can be loaded and easily displayed on the screen.</p>

<p><strong>Other features of the display include:</strong></p>

<ul>
  <li>1.8″ diagonal LCD TFT display</li>
  <li>128×160 resolution, 18-bit (262,144) color</li>
  <li>4 or 5 wire SPI digital interface</li>
  <li>Built-in microSD slot – uses 2 more digital lines</li>
  <li>5V compatible! Use with 3.3V or 5V logic</li>
  <li>Onboard 3.3V @ 150mA LDO regulator</li>
  <li>2 white LED backlight, a transistor connected so you can PWM dim the backlight</li>
  <li>1×10 header for easy breadboarding</li>
  <li>4 x 0.9″/2mm mounting holes in corners</li>
  <li>Overall dimensions: 1.35″ x 2.2″ x 0.25″ (34mm x 56mm x 6.5mm)</li>
  <li>Current draw is based on LED backlight usage: with full backlight draw is ~50mA</li>
</ul>

<p>The goal of this tutorial is to demonstrate the abilities of the TFT to display images and text in different colors and some animation.</p>

<h1 id="sensors">Sensors</h1>
<h2 id="mmwave-sensors">mmwave sensors</h2>
<p>2410 can measure both static and moving targets.
2420 can only measure moving and slightly moving targets.
This is a comparison diagram (in Chinese). You may use google translate.</p>

<p><img src="/assets/images/mmwave.jpg" alt="Image" /></p>

<p>2410, 2410B, 2410C, 2410S can all detect static targets, but not 2420. 2420 also dont have BT, dont have light sensor, and dont have OTA.</p>

<p>Top to down:</p>
<ul>
  <li>Model:</li>
  <li>Image:</li>
  <li>Usage: (all can detect static targets except 2420)</li>
  <li>Dimension:</li>
  <li>Voltage:</li>
  <li>Avg current:</li>
  <li>Effective distance:</li>
  <li>Effective angle: (±60 for all)</li>
  <li>Configuration method: (all UART, use app if has BT)</li>
  <li>Bluetooth: (only 2410B and C has)</li>
  <li>Light sensor: (only 2410B and C has)</li>
  <li>OTA upgrade: (only 2410 and 2420 cannot)</li>
  <li>Installation method: (Support wall and ceiling mount)</li>
</ul>

<h2 id="pinout">Pinout</h2>
<ul>
  <li>LED - 3.3v</li>
  <li>SCK - D13</li>
  <li>SDA - D11</li>
  <li>DC - D9</li>
  <li>Reset - D8</li>
  <li>CS - D10</li>
  <li>GND - GND</li>
  <li>VCC - 5v</li>
</ul>

<p>https://www.youtube.com/watch?v=boagCpb6DgY</p>

<h2 id="sample-code">Sample code</h2>
<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="na">esphome</span><span class="pi">:</span>
  <span class="na">name</span><span class="pi">:</span> <span class="s">wind</span>
  <span class="c1"># Set inital value for idle timer</span>
  <span class="na">on_boot</span><span class="pi">:</span>
    <span class="na">priority</span><span class="pi">:</span> <span class="s">-100</span>
    <span class="na">then</span><span class="pi">:</span>
      <span class="pi">-</span> <span class="na">lambda</span><span class="pi">:</span> <span class="pi">|-</span>
          <span class="s">id(idle_time) = id(my_time).now().timestamp;</span>
    
<span class="na">esp32</span><span class="pi">:</span>
  <span class="na">board</span><span class="pi">:</span> <span class="s">esp32dev</span>
  <span class="na">framework</span><span class="pi">:</span>
    <span class="na">type</span><span class="pi">:</span> <span class="s">arduino</span>

<span class="c1"># Enable logging</span>
<span class="na">logger</span><span class="pi">:</span>

<span class="c1"># Enable Home Assistant API</span>
<span class="na">api</span><span class="pi">:</span>

<span class="na">spi</span><span class="pi">:</span>
  <span class="na">clk_pin</span><span class="pi">:</span> <span class="s">GPIO18</span>
  <span class="na">mosi_pin</span><span class="pi">:</span> <span class="s">GPIO23</span>
  <span class="na">miso_pin</span><span class="pi">:</span> <span class="s">GPIO19</span>

<span class="na">ota</span><span class="pi">:</span>
  <span class="na">password</span><span class="pi">:</span> <span class="s2">"</span><span class="s">8aebd6eb0427929de523046d6773d66e"</span>

<span class="na">wifi</span><span class="pi">:</span>
  <span class="na">ssid</span><span class="pi">:</span> <span class="kt">!secret</span> <span class="s">wifi_ssid</span>
  <span class="na">password</span><span class="pi">:</span> <span class="kt">!secret</span> <span class="s">wifi_password</span>

  <span class="c1"># Enable fallback hotspot (captive portal) in case wifi connection fails</span>
  <span class="na">ap</span><span class="pi">:</span>
    <span class="na">ssid</span><span class="pi">:</span> <span class="s2">"</span><span class="s">Wind</span><span class="nv"> </span><span class="s">Fallback</span><span class="nv"> </span><span class="s">Hotspot"</span>
    <span class="na">password</span><span class="pi">:</span> <span class="s2">"</span><span class="s">sh1mZkRvphaJ"</span>

<span class="na">captive_portal</span><span class="pi">:</span>

<span class="c1"># All sensors sourced from HA - Ecowitt weather station sensors</span>
<span class="na">text_sensor</span><span class="pi">:</span>
  <span class="pi">-</span> <span class="na">platform</span><span class="pi">:</span> <span class="s">homeassistant</span>
    <span class="na">name</span><span class="pi">:</span> <span class="s2">"</span><span class="s">Current</span><span class="nv"> </span><span class="s">Temp"</span>
    <span class="na">entity_id</span><span class="pi">:</span> <span class="s">sensor.weather_station_temperature</span>
    <span class="na">id</span><span class="pi">:</span> <span class="s">temp</span>

  <span class="pi">-</span> <span class="na">platform</span><span class="pi">:</span> <span class="s">homeassistant</span>
    <span class="na">name</span><span class="pi">:</span> <span class="s2">"</span><span class="s">Current</span><span class="nv"> </span><span class="s">Wind</span><span class="nv"> </span><span class="s">Dir"</span>
    <span class="na">entity_id</span><span class="pi">:</span> <span class="s">sensor.wind_direction</span>
    <span class="na">id</span><span class="pi">:</span> <span class="s">wind_dir</span>

  <span class="pi">-</span> <span class="na">platform</span><span class="pi">:</span> <span class="s">homeassistant</span>
    <span class="na">name</span><span class="pi">:</span> <span class="s2">"</span><span class="s">Current</span><span class="nv"> </span><span class="s">Wind</span><span class="nv"> </span><span class="s">Speed"</span>
    <span class="na">entity_id</span><span class="pi">:</span> <span class="s">sensor.wind_speed</span>
    <span class="na">id</span><span class="pi">:</span> <span class="s">wind_speed</span>

  <span class="pi">-</span> <span class="na">platform</span><span class="pi">:</span> <span class="s">homeassistant</span>
    <span class="na">name</span><span class="pi">:</span> <span class="s2">"</span><span class="s">Named</span><span class="nv"> </span><span class="s">Wind</span><span class="nv"> </span><span class="s">Dir"</span>
    <span class="na">entity_id</span><span class="pi">:</span> <span class="s">sensor.named_wind_direction</span>
    <span class="na">id</span><span class="pi">:</span> <span class="s">named_dir</span>
    
  <span class="pi">-</span> <span class="na">platform</span><span class="pi">:</span> <span class="s">homeassistant</span>
    <span class="na">name</span><span class="pi">:</span> <span class="s2">"</span><span class="s">Rain</span><span class="nv"> </span><span class="s">since</span><span class="nv"> </span><span class="s">12am"</span>
    <span class="na">entity_id</span><span class="pi">:</span> <span class="s">sensor.rain_accumulation</span>
    <span class="na">id</span><span class="pi">:</span> <span class="s">total_rain</span>

  <span class="pi">-</span> <span class="na">platform</span><span class="pi">:</span> <span class="s">homeassistant</span>
    <span class="na">name</span><span class="pi">:</span> <span class="s2">"</span><span class="s">Pressure</span><span class="nv"> </span><span class="s">MSL</span><span class="nv"> </span><span class="s">hPa"</span>
    <span class="na">entity_id</span><span class="pi">:</span> <span class="s">sensor.atmospheric_pressure_msl</span>
    <span class="na">id</span><span class="pi">:</span> <span class="s">pressure</span>
    
  <span class="pi">-</span> <span class="na">platform</span><span class="pi">:</span> <span class="s">homeassistant</span>
    <span class="na">name</span><span class="pi">:</span> <span class="s2">"</span><span class="s">Wind</span><span class="nv"> </span><span class="s">gust"</span>
    <span class="na">entity_id</span><span class="pi">:</span> <span class="s">sensor.wind_gust</span>
    <span class="na">id</span><span class="pi">:</span> <span class="s">gust</span>

<span class="c1"># Stores timestamp of last motion detect    </span>
<span class="na">globals</span><span class="pi">:</span>
  <span class="pi">-</span> <span class="na">id</span><span class="pi">:</span> <span class="s">idle_time</span>
    <span class="na">type</span><span class="pi">:</span> <span class="s">long</span>

<span class="na">font</span><span class="pi">:</span>
  <span class="pi">-</span> <span class="na">file</span><span class="pi">:</span> <span class="s2">"</span><span class="s">fonts/calibri.ttf"</span>
    <span class="na">id</span><span class="pi">:</span> <span class="s">calibri_20</span>
    <span class="na">size</span><span class="pi">:</span> <span class="m">20</span>

  <span class="pi">-</span> <span class="na">file</span><span class="pi">:</span> <span class="s2">"</span><span class="s">fonts/calibri.ttf"</span>
    <span class="na">id</span><span class="pi">:</span> <span class="s">calibri_25</span>
    <span class="na">size</span><span class="pi">:</span> <span class="m">25</span>
    
  <span class="pi">-</span> <span class="na">file</span><span class="pi">:</span> <span class="s2">"</span><span class="s">fonts/calibri.ttf"</span>
    <span class="na">id</span><span class="pi">:</span> <span class="s">calibri_40</span>
    <span class="na">size</span><span class="pi">:</span> <span class="m">40</span>
    
<span class="na">time</span><span class="pi">:</span>
  <span class="pi">-</span> <span class="na">platform</span><span class="pi">:</span> <span class="s">homeassistant</span>
    <span class="na">id</span><span class="pi">:</span> <span class="s">my_time</span>

    <span class="na">on_time</span><span class="pi">:</span>
      <span class="c1"># Every 1 minute check if no presence trigger for 5 min</span>
      <span class="pi">-</span> <span class="na">seconds</span><span class="pi">:</span> <span class="m">0</span>
        <span class="na">minutes</span><span class="pi">:</span> <span class="s">/1</span>
        <span class="na">then</span><span class="pi">:</span>
          <span class="pi">-</span> <span class="na">if</span><span class="pi">:</span>
              <span class="c1"># more than 5 min with no motion? Exercise display then turn off backlight</span>
              <span class="na">condition</span><span class="pi">:</span>
                <span class="na">lambda</span><span class="pi">:</span> <span class="pi">|-</span>
                  <span class="s">return id(my_time).now().timestamp-id(idle_time) &gt; 300;</span>
              <span class="na">then</span><span class="pi">:</span>
                <span class="pi">-</span> <span class="na">display.page.show</span><span class="pi">:</span> <span class="s">page2</span>
                <span class="pi">-</span> <span class="na">delay</span><span class="pi">:</span> <span class="s">1s</span>
                <span class="pi">-</span> <span class="na">display.page.show</span><span class="pi">:</span> <span class="s">page3</span>
                <span class="pi">-</span> <span class="na">delay</span><span class="pi">:</span> <span class="s">1s</span>
                <span class="pi">-</span> <span class="na">display.page.show</span><span class="pi">:</span> <span class="s">page4</span>
                <span class="pi">-</span> <span class="na">delay</span><span class="pi">:</span> <span class="s">1s</span>
                <span class="pi">-</span> <span class="na">display.page.show</span><span class="pi">:</span> <span class="s">page5</span>
                <span class="pi">-</span> <span class="na">light.turn_off</span><span class="pi">:</span> <span class="s">back_light</span>
                <span class="pi">-</span> <span class="na">delay</span><span class="pi">:</span> <span class="s">1s</span>
                <span class="pi">-</span> <span class="na">display.page.show</span><span class="pi">:</span> <span class="s">page1</span>

<span class="c1"># PIR on GPIO33</span>
<span class="na">binary_sensor</span><span class="pi">:</span>
  <span class="pi">-</span> <span class="na">platform</span><span class="pi">:</span> <span class="s">gpio</span>
    <span class="na">pin</span><span class="pi">:</span> <span class="s">GPIO33</span>
    <span class="na">id</span><span class="pi">:</span> <span class="s">pir</span>
    <span class="na">device_class</span><span class="pi">:</span> <span class="s">motion</span>
    <span class="c1"># turn on display on motion detect   </span>
    <span class="c1"># store timestamp of last detection event</span>
    <span class="na">on_press</span><span class="pi">:</span>
      <span class="na">then</span><span class="pi">:</span>
        <span class="pi">-</span> <span class="na">lambda</span><span class="pi">:</span> <span class="pi">|-</span>
            <span class="s">id(idle_time) = id(my_time).now().timestamp;</span>
        <span class="pi">-</span> <span class="na">display.page.show</span><span class="pi">:</span> <span class="s">page1</span>
        <span class="pi">-</span> <span class="na">light.turn_on</span><span class="pi">:</span> <span class="s">back_light</span>
    <span class="na">on_release</span><span class="pi">:</span>
      <span class="na">then</span><span class="pi">:</span>
        <span class="pi">-</span> <span class="na">lambda</span><span class="pi">:</span> <span class="pi">|-</span>
            <span class="s">id(idle_time) = id(my_time).now().timestamp;</span>

<span class="c1"># backlight pin as PWM GPIO32</span>
<span class="na">output</span><span class="pi">:</span>
  <span class="pi">-</span> <span class="na">platform</span><span class="pi">:</span> <span class="s">ledc</span>
    <span class="na">pin</span><span class="pi">:</span> <span class="m">32</span>
    <span class="na">id</span><span class="pi">:</span> <span class="s">gpio_32_backlight_pwm</span>

<span class="c1"># define as light</span>
<span class="na">light</span><span class="pi">:</span>
  <span class="pi">-</span> <span class="na">platform</span><span class="pi">:</span> <span class="s">monochromatic</span>
    <span class="na">output</span><span class="pi">:</span> <span class="s">gpio_32_backlight_pwm</span>
    <span class="na">name</span><span class="pi">:</span> <span class="s2">"</span><span class="s">ILI9341</span><span class="nv"> </span><span class="s">Display</span><span class="nv"> </span><span class="s">Backlight"</span>
    <span class="na">id</span><span class="pi">:</span> <span class="s">back_light</span>
    <span class="na">restore_mode</span><span class="pi">:</span> <span class="s">ALWAYS_ON</span>
    
<span class="c1"># 2.2" TFT display 320x240, portrait orientation</span>
<span class="na">display</span><span class="pi">:</span>
  <span class="pi">-</span> <span class="na">platform</span><span class="pi">:</span> <span class="s">ili9341</span>
    <span class="na">rotation</span><span class="pi">:</span> <span class="m">0</span>
    <span class="na">model</span><span class="pi">:</span> <span class="s">TFT </span><span class="m">2.4</span>
    <span class="na">dc_pin</span><span class="pi">:</span> <span class="s">GPIO21</span>
    <span class="na">cs_pin</span><span class="pi">:</span> <span class="s">GPIO22</span>
    <span class="na">led_pin</span><span class="pi">:</span> <span class="s">GPIO32</span>
    <span class="na">reset_pin</span><span class="pi">:</span> <span class="s">GPIO17</span>
    
    <span class="c1"># Page 1 - main display.  Other pages or for anti burn-in</span>
    <span class="na">pages</span><span class="pi">:</span>
      <span class="pi">-</span> <span class="na">id</span><span class="pi">:</span> <span class="s">page1</span>
        <span class="na">lambda</span><span class="pi">:</span> <span class="pi">|-</span>
          <span class="s">// Colours - used for visiual indication of wind strength</span>
          <span class="s">auto red = Color(255, 0, 0);</span>
          <span class="s">auto green = Color(0, 255, 0);</span>
          <span class="s">auto light_blue = Color(135, 237, 232);</span>
          <span class="s">auto orange = Color(255, 170, 43);</span>
          <span class="s">auto white = Color(255, 255, 255);</span>
          <span class="s">auto purple = Color(97, 15, 219);</span>
          <span class="s">auto grey = Color(100, 135, 135);</span>
          <span class="s">// history arrays for trend display</span>
          <span class="s">static float hist_wind[30];</span>
          <span class="s">static int hist_dir[30];</span>
          <span class="s">static int index=0;</span>
          <span class="s">static int prev_index=29;</span>
          <span class="s">// Convert wind direction to int, speed to float</span>
          <span class="s">int dir = atoi(id(wind_dir).state.c_str());</span>
          <span class="s">float speed = atof(id(wind_speed).state.c_str());</span>
          <span class="s">// Calculate xy position to plot wind indicator</span>
          <span class="s">int x = 120 + (90 * (cos((dir-90)*PI/180)));</span>
          <span class="s">int y = 150 + (90 * (sin((dir-90)*PI/180)));</span>
          <span class="s">// Store in array</span>
          <span class="s">if (hist_wind[prev_index]!=speed || hist_dir[prev_index]!=dir) {</span>
            <span class="s">hist_wind[index] = speed;</span>
            <span class="s">hist_dir[index] = dir;</span>
            <span class="s">index += 1;</span>
            <span class="s">prev_index += 1;</span>
            <span class="s">if (index==30) { index = 0; }</span>
            <span class="s">if (prev_index==30) { prev_index = 0; }</span>
          <span class="s">}</span>
          <span class="s">// Trend maximum for last 30</span>
          <span class="s">float max = hist_wind[0];</span>
          <span class="s">for (size_t i = 0; i &lt; 30; ++i) {</span>
            <span class="s">if (hist_wind[i] &gt; max) {</span>
              <span class="s">max = hist_wind[i];</span>
            <span class="s">}</span>
          <span class="s">}</span>
          <span class="s">// Weather data</span>
          <span class="s">it.strftime(5, 10, id(calibri_25), TextAlign::TOP_LEFT, "%H:%M", id(my_time).now());</span>
          <span class="s">it.printf(235, 10, id(calibri_25), TextAlign::TOP_RIGHT, "%s °C", id(temp).state.c_str());</span>
          <span class="s">it.printf(5, 290, id(calibri_20), TextAlign::BOTTOM_LEFT, "G %s km/h", id(gust).state.c_str());</span>
          <span class="s">it.printf(5, 310, id(calibri_20), TextAlign::BOTTOM_LEFT, "TM %2.1f km/h", max);</span>
          <span class="s">it.printf(235, 290, id(calibri_20), TextAlign::BOTTOM_RIGHT, "%s mm", id(total_rain).state.c_str());</span>
          <span class="s">it.printf(235, 310, id(calibri_20), TextAlign::BOTTOM_RIGHT, "%s hPa", id(pressure).state.c_str());</span>
          <span class="s">// Display trend data</span>
          <span class="s">for (size_t i = 0; i &lt; 30; ++i) {</span>
            <span class="s">if (hist_wind[i]&gt;0) {</span>
              <span class="s">int a = 120 + ((90-(70*hist_wind[i]/max)) * (cos((hist_dir[i]-90)*PI/180)));</span>
              <span class="s">int b = 150 + ((90-(70*hist_wind[i]/max)) * (sin((hist_dir[i]-90)*PI/180)));</span>
              <span class="s">int c = 120 + (90 * (cos((hist_dir[i]-90)*PI/180)));</span>
              <span class="s">int d = 150 + (90 * (sin((hist_dir[i]-90)*PI/180)));</span>
              <span class="s">it.line(a, b, c, d, grey);</span>
            <span class="s">}</span>
          <span class="s">}</span>
          <span class="s">// Compass rose</span>
          <span class="s">it.circle(120, 150, 90);</span>
          <span class="s">it.print(120, 50, id(calibri_20), red, TextAlign::BOTTOM_CENTER, "N");</span>
          <span class="s">it.print(120, 250, id(calibri_20), red, TextAlign::TOP_CENTER, "S");</span>
          <span class="s">it.print(20, 150, id(calibri_20), red, TextAlign::CENTER_RIGHT, "W");</span>
          <span class="s">it.print(220, 150, id(calibri_20), red, TextAlign::CENTER_LEFT, "E");</span>
          <span class="s">// Wind pointer</span>
          <span class="s">if (speed&lt;=11) { it.filled_circle(x, y, 7, light_blue); }</span>
            <span class="s">else {</span>
          <span class="s">if (speed&gt;11 &amp;&amp; speed&lt;=30) { it.filled_circle(x, y, 7, green); } </span>
            <span class="s">else {</span>
          <span class="s">if (speed&gt;30 &amp;&amp; speed&lt;=60) { it.filled_circle(x, y, 7, orange); } </span>
            <span class="s">else {</span>
          <span class="s">if (speed&gt;60) { it.filled_circle(x, y, 7, red); } </span>
            <span class="s">} } }</span>
          <span class="s">// Wind details</span>
          <span class="s">it.printf(120, 130, id(calibri_25), TextAlign::BOTTOM_CENTER, "%s", id(named_dir).state.c_str());</span>
          <span class="s">if (speed&lt;10) { it.printf(120, 175, id(calibri_40), TextAlign::BOTTOM_CENTER, "%2.1f", speed); }</span>
            <span class="s">else { it.printf(120, 175, id(calibri_40), TextAlign::BOTTOM_CENTER, "%2.0f", round(speed));   </span>
          <span class="s">}</span>
          <span class="s">it.print(120, 175, id(calibri_20), TextAlign::TOP_CENTER, "km/h");</span>
          
      <span class="pi">-</span> <span class="na">id</span><span class="pi">:</span> <span class="s">page2</span>
        <span class="na">lambda</span><span class="pi">:</span> <span class="pi">|-</span>
          <span class="s">// fill screen red</span>
          <span class="s">auto red = Color(255, 0, 0);</span>
          <span class="s">it.fill(red);</span>
          
      <span class="pi">-</span> <span class="na">id</span><span class="pi">:</span> <span class="s">page3</span>
        <span class="na">lambda</span><span class="pi">:</span> <span class="pi">|-</span>
          <span class="s">// Fill screen green</span>
          <span class="s">auto green = Color(0, 255, 0);</span>
          <span class="s">it.fill(green);</span>
          
      <span class="pi">-</span> <span class="na">id</span><span class="pi">:</span> <span class="s">page4</span>
        <span class="na">lambda</span><span class="pi">:</span> <span class="pi">|-</span>
          <span class="s">// Fill screen white</span>
          <span class="s">auto white = Color(255, 255, 255);</span>
          <span class="s">it.fill(white);</span>
          
      <span class="pi">-</span> <span class="na">id</span><span class="pi">:</span> <span class="s">page5</span>
        <span class="na">lambda</span><span class="pi">:</span> <span class="pi">|-</span>
          <span class="s">it.fill(COLOR_OFF);</span>

</code></pre></div></div>
<p>Source: https://community.home-assistant.io/t/mini-weather-station-display-esphome-updated-for-3-2-touchscreen-with-bom-forecast/390606</p>]]></content><author><name>Real Exposer</name></author><summary type="html"><![CDATA[ESP32]]></summary></entry><entry><title type="html">Tmux</title><link href="https://tech.realexposer.com/blog/Tmux/" rel="alternate" type="text/html" title="Tmux" /><published>2023-05-19T19:34:30+00:00</published><updated>2023-05-19T19:34:30+00:00</updated><id>https://tech.realexposer.com/blog/Tmux</id><content type="html" xml:base="https://tech.realexposer.com/blog/Tmux/"><![CDATA[<p>In this post, I list some of the important Tmux commands</p>

<h2 id="join-two-windows-into-one-join-window-numbers-1-and-2">Join two windows into one (join window numbers 1 and 2)</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>:join-pane <span class="nt">-s</span> 2 <span class="nt">-t</span> 1
</code></pre></div></div>
<p>Cheatsheet</p>
<h1 id="sessions">Sessions</h1>
<h2 id="start-a-new-session">Start a new session</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>tmux
tmux new
tmux new-session
:new
</code></pre></div></div>

<h2 id="start-a-new-session-with-the-name-mysession">Start a new session with the name mysession</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>tmux new <span class="nt">-s</span> mysession
new <span class="nt">-s</span> mysession
</code></pre></div></div>

<h2 id="killdelete-session-mysession">kill/delete session mysession</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>tmux kill-ses <span class="nt">-t</span> mysession
tmux kill-session <span class="nt">-t</span> mysession
</code></pre></div></div>

<h2 id="killdelete-all-sessions-but-the-current">kill/delete all sessions but the current</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>tmux kill-session <span class="nt">-a</span>
</code></pre></div></div>

<h2 id="killdelete-all-sessions-but-mysession">kill/delete all sessions but mysession</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>tmux kill-session <span class="nt">-a</span> <span class="nt">-t</span> mysession
</code></pre></div></div>

<h2 id="rename-session">Rename session</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Ctrl + b <span class="err">$</span>
</code></pre></div></div>
<h2 id="detach-from-session">Detach from session</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Ctrl + b d
</code></pre></div></div>
<h2 id="detach-others-on-the-session-maximize-window-by-detach-other-clients">Detach others on the session (Maximize window by detach other clients)</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>attach <span class="nt">-d</span>
</code></pre></div></div>
<h2 id="tmux-list-sessions">tmux list-sessions</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>tmux <span class="nb">ls</span>
</code></pre></div></div>
<h2 id="show-all-sessions">Show all sessions</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Ctrl + b s
</code></pre></div></div>
<h2 id="attach-to-last-session">Attach to last session</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>tmux a
tmux at
tmux attach
tmux attach-session
</code></pre></div></div>
<h2 id="attach-to-a-session-with-the-name-mysession">Attach to a session with the name mysession</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>tmux a <span class="nt">-t</span> mysession
tmux at <span class="nt">-t</span> mysession
tmux attach <span class="nt">-t</span> mysession
tmux attach-session <span class="nt">-t</span> mysession
</code></pre></div></div>
<h2 id="session-and-window-preview">Session and Window Preview</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Ctrl + b w
</code></pre></div></div>
<h2 id="move-to-previous-session">Move to previous session</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Ctrl + b <span class="o">(</span>
</code></pre></div></div>
<h2 id="move-to-next-session">Move to next session</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Ctrl + b <span class="o">)</span>
</code></pre></div></div>

<h1 id="windows">Windows</h1>
<h2 id="start-a-new-session-with-the-name-mysession-and-window-mywindow">start a new session with the name mysession and window mywindow</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>tmux new <span class="nt">-s</span> mysession <span class="nt">-n</span> mywindow
</code></pre></div></div>
<h2 id="create-window">Create window</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Ctrl + b c
</code></pre></div></div>
<h2 id="rename-current-window">Rename current window</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Ctrl + b ,
</code></pre></div></div>
<h2 id="close-current-window">Close current window</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Ctrl + b &amp;
</code></pre></div></div>
<h2 id="list-windows">List windows</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Ctrl + b w
</code></pre></div></div>
<h2 id="previous-window">Previous window</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Ctrl + b p
</code></pre></div></div>
<h2 id="next-window">Next window</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Ctrl + b n
</code></pre></div></div>
<h2 id="switchselect-window-by-number">Switch/select window by number</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Ctrl + b 0 ... 9
</code></pre></div></div>
<h2 id="toggle-last-active-window">Toggle last active window</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Ctrl + b l
</code></pre></div></div>
<h2 id="reorder-window-swap-window-number-2src-and-1dst">Reorder window, swap window number 2(src) and 1(dst)</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>swap-window <span class="nt">-s</span> 2 <span class="nt">-t</span> 1
</code></pre></div></div>
<h2 id="move-current-window-to-the-left-by-one-position">Move current window to the left by one position</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>swap-window <span class="nt">-t</span> <span class="nt">-1</span>
</code></pre></div></div>

<h1 id="panes">Panes</h1>
<h2 id="toggle-last-active-pane">Toggle last active pane</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Ctrl + b <span class="p">;</span>
</code></pre></div></div>
<h2 id="split-pane-with-horizontal-layout">Split pane with horizontal layout</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Ctrl + b %
</code></pre></div></div>
<h2 id="split-pane-with-vertical-layout">Split pane with vertical layout</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Ctrl + b <span class="s2">"
</span></code></pre></div></div>
<h2 id="move-the-current-pane-left">Move the current pane left</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Ctrl + b <span class="o">{</span>
</code></pre></div></div>
<h2 id="move-the-current-pane-right">Move the current pane right</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Ctrl + b <span class="o">}</span>
</code></pre></div></div>
<h2 id="switch-to-pane-to-the-direction">Switch to pane to the direction</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Ctrl + b 
Ctrl + b 
Ctrl + b 
Ctrl + b 
</code></pre></div></div>
<h2 id="toggle-synchronize-panessend-command-to-all-panes">Toggle synchronize-panes(send command to all panes)</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>setw synchronize-panes
</code></pre></div></div>
<h2 id="toggle-between-pane-layouts">Toggle between pane layouts</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Ctrl + b Spacebar
</code></pre></div></div>
<h2 id="switch-to-next-pane">Switch to next pane</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Ctrl + b o
</code></pre></div></div>
<h2 id="show-pane-numbers">Show pane numbers</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Ctrl + b q
</code></pre></div></div>
<h2 id="switchselect-pane-by-number">Switch/select pane by number</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Ctrl + b q 0 ... 9
</code></pre></div></div>
<h2 id="toggle-pane-zoom">Toggle pane zoom</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Ctrl + b z
</code></pre></div></div>
<h2 id="convert-pane-into-a-window">Convert pane into a window</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Ctrl + b <span class="o">!</span>
</code></pre></div></div>
<h2 id="resize-current-pane-heightholding-second-key-is-optional">Resize current pane height(holding second key is optional)</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Ctrl + b + 
Ctrl + b Ctrl + 
Ctrl + b + 
Ctrl + b Ctrl + 
</code></pre></div></div>
<h2 id="resize-current-pane-widthholding-second-key-is-optional">Resize current pane width(holding second key is optional)</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Ctrl + b + 
Ctrl + b Ctrl + 
Ctrl + b + 
Ctrl + b Ctrl + 
</code></pre></div></div>
<h2 id="close-current-pane">Close current pane</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Ctrl + b x
</code></pre></div></div>

<h1 id="copy-mode">Copy Mode</h1>
<h2 id="use-vi-keys-in-buffer">use vi keys in buffer</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>setw <span class="nt">-g</span> mode-keys vi
</code></pre></div></div>
<h2 id="enter-copy-mode">Enter copy mode</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Ctrl + b <span class="o">[</span>
</code></pre></div></div>
<h2 id="enter-copy-mode-and-scroll-one-page-up">Enter copy mode and scroll one page up</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Ctrl + b PgUp
</code></pre></div></div>
<h2 id="quit-mode">Quit mode</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>q
</code></pre></div></div>
<h2 id="go-to-top-line">Go to top line</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>g
</code></pre></div></div>
<h2 id="go-to-bottom-line">Go to bottom line</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>G
</code></pre></div></div>
<h2 id="scroll-up">Scroll up</h2>

<h2 id="scroll-down">Scroll down</h2>

<h2 id="move-cursor-left">Move cursor left</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>h
</code></pre></div></div>
<h2 id="move-cursor-down">Move cursor down</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>j
</code></pre></div></div>
<h2 id="move-cursor-up">Move cursor up</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>k
</code></pre></div></div>
<h2 id="move-cursor-right">Move cursor right</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>l
</code></pre></div></div>
<h2 id="move-cursor-forward-one-word-at-a-time">Move cursor forward one word at a time</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>w
</code></pre></div></div>
<h2 id="move-cursor-backward-one-word-at-a-time">Move cursor backward one word at a time</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>b
</code></pre></div></div>
<h2 id="search-forward">Search forward</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>/
</code></pre></div></div>
<h2 id="search-backward">Search backward</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>?
</code></pre></div></div>
<h2 id="next-keyword-occurance">Next keyword occurance</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>n
</code></pre></div></div>
<h2 id="previous-keyword-occurance">Previous keyword occurance</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>N
</code></pre></div></div>
<h2 id="start-selection">Start selection</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Spacebar
</code></pre></div></div>
<h2 id="clear-selection">Clear selection</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Esc
</code></pre></div></div>
<h2 id="copy-selection">Copy selection</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Enter
</code></pre></div></div>
<h2 id="paste-contents-of-buffer_0">Paste contents of buffer_0</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Ctrl + b <span class="o">]</span>
</code></pre></div></div>
<h2 id="display-buffer_0-contents">display buffer_0 contents</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>show-buffer
</code></pre></div></div>
<h2 id="copy-entire-visible-contents-of-pane-to-a-buffer">copy entire visible contents of pane to a buffer</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>capture-pane
</code></pre></div></div>
<h2 id="show-all-buffers">Show all buffers</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>list-buffers
</code></pre></div></div>
<h2 id="show-all-buffers-and-paste-selected">Show all buffers and paste selected</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>choose-buffer
</code></pre></div></div>
<h2 id="save-buffer-contents-to-buftxt">Save buffer contents to buf.txt</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>save-buffer buf.txt
</code></pre></div></div>
<h2 id="delete-buffer_1">delete buffer_1</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>delete-buffer <span class="nt">-b</span> 1
</code></pre></div></div>

<h1 id="misc">Misc</h1>
<h2 id="enter-command-mode">Enter command mode</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Ctrl + b :
</code></pre></div></div>
<h2 id="set-option-for-all-sessions">Set OPTION for all sessions</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">set</span> <span class="nt">-g</span> OPTION
</code></pre></div></div>
<h2 id="set-option-for-all-windows">Set OPTION for all windows</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>setw <span class="nt">-g</span> OPTION
</code></pre></div></div>
<h2 id="enable-mouse-mode">Enable mouse mode</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">set </span>mouse on
</code></pre></div></div>
<h2 id="list-key-bindingsshortcuts">List key bindings(shortcuts)</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Help
tmux list-keys
list-keys
Ctrl + b ?
</code></pre></div></div>
<h2 id="show-every-session-window-pane-etc">Show every session, window, pane, etc…</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>tmux info
</code></pre></div></div>

<h1 id="the-following-tmux-pane-shortcuts-can-come-in-hand-for-you-if-you-use-it-regularly">The following Tmux pane shortcuts can come in hand for you if you use it regularly:</h1>

<p>Default Prefix + ” – Split windows vertically
Default Prefix + % – Split windows horizontally
Default Prefix + { – Move the current pane to the left
Default Prefix + } – Move the current pane to the right
Default Prefix + q – Show pane numbers
Default Prefix + z – Toggle the pane zoom option
Default Prefix + (↑ ↓ ← →) – Change panes to the direction highlighted
Default Prefix + Ctrl + (↑ ↓) – Resize the height of the current pane (To perform the resize, hold onto the Ctrl key while tapping the down or up keys)
Default Prefix + Ctrl + (← →) – Resize the width of the current pane (To perform the resize, hold onto the Ctrl key while tapping the right or left keys)
Default Prefix + ! – Convert a pane into a window
Default Prefix + 0 … 9 – Select/Switch the pane by number
Default Prefix + spacebar – Toggle between different pane layouts
Default Prefix + o – Switch to the next pane
Default Prefix + x – Close the current pane</p>]]></content><author><name>Real Exposer</name></author><category term="blog" /><category term="linux" /><summary type="html"><![CDATA[In this post, I list some of the important Tmux commands]]></summary></entry><entry><title type="html">Home Automation</title><link href="https://tech.realexposer.com/blog/home-automation/" rel="alternate" type="text/html" title="Home Automation" /><published>2021-11-01T19:34:30+00:00</published><updated>2021-11-01T19:34:30+00:00</updated><id>https://tech.realexposer.com/blog/home-automation</id><content type="html" xml:base="https://tech.realexposer.com/blog/home-automation/"><![CDATA[<p>In this post, I list all the home automation related resources</p>

<p>##</p>]]></content><author><name>Real Exposer</name></author><category term="blog" /><category term="linux" /><category term="automation" /><summary type="html"><![CDATA[In this post, I list all the home automation related resources]]></summary></entry><entry><title type="html">Raspberry Pi Tips/Tricks/Useful Links and Projects</title><link href="https://tech.realexposer.com/blog/raspberrypi-projects-tricks/" rel="alternate" type="text/html" title="Raspberry Pi Tips/Tricks/Useful Links and Projects" /><published>2021-10-30T19:34:30+00:00</published><updated>2021-10-30T19:34:30+00:00</updated><id>https://tech.realexposer.com/blog/raspberrypi-projects-tricks</id><content type="html" xml:base="https://tech.realexposer.com/blog/raspberrypi-projects-tricks/"><![CDATA[<h2 id="useful-projects-links">Useful projects links:</h2>
<ul>
  <li><a href="https://github.com/careyer/awesome-raspberry-pi">Awesome raspberry pi</a></li>
</ul>

<h2 id="operating-systems">Operating systems:</h2>
<ul>
  <li><a href="https://retropie.org.uk/">RetroPie</a> allows you to turn your Raspberry Pi or PC into a retro-gaming machine.</li>
  <li>Raspbian</li>
  <li>Screenly</li>
  <li>MotionEyeOS</li>
  <li>RasPlex</li>
  <li>DietPi</li>
  <li><a href="https://moodeaudio.org/">Moodeaudio</a></li>
</ul>

<h2 id="media-center">Media Center:</h2>
<ul>
  <li><a href="http://www.xbian.org/what-is-xbian/">Xbian</a> is a small, fast and lightweight media center distribution.</li>
  <li>OSMC</li>
  <li>LibreMC</li>
  <li><a href="http://wiki.openelec.tv/index.php/Installing_OpenELEC_on_Raspberry_Pi#tab.3DWindows">Installing OpenElec</a> on Raspberry Pi, <a href="http://openelec.tv/get-openelec">OpenElec Builds</a></li>
</ul>

<h2 id="interesting-projects">Interesting projects:</h2>
<ul>
  <li><a href="http://michaelteeuw.nl/post/83916869600/magic-mirror-part-vi-production-of-the">Magic Mirror</a>, Mirrors designed <a href="http://michaelteeuw.nl/post/111886383522/magic-mirrors-around-the-world">around the world</a>, <a href="https://github.com/MichMich/MagicMirror">GitHub repository</a>.</li>
  <li>Photo Frame.</li>
  <li>NAS
    <ul>
      <li><a href="http://pimylifeup.com/raspberry-pi-nas/">Raspberry Pi NAS</a></li>
      <li><a href="http://www.makeuseof.com/tag/turn-your-raspberry-pi-into-a-nas-box/">Raspberry Pi NAS with redundancy using rsync</a></li>
      <li>How to make a Raspberry Pi NAS <a href="https://www.youtube.com/watch?v=WXKkqDZi5jc">Youtube video</a></li>
    </ul>
  </li>
  <li>Raspberry Pi camera <a href="http://elinux.org/RPi-Cam-Web-Interface">live streaming and recording web interface</a></li>
  <li><a href="https://forums.plex.tv/discussion/155081/plex-media-server-not-running-on-rapsberry-pi-2">Configuring Plex in OSMC</a> (fixing the issue with some configuration - forum topic)</li>
  <li><a href="http://blissflixx.rocks/">BlissFlixx</a></li>
</ul>

<h2 id="some-of-the-useful-pieces-of-information">Some of the useful pieces of information:</h2>
<p>The default pi user on Raspbian is a sudoer. This gives the ability to run commands as root when preceded by sudo, and to switch to the root user with</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>su
</code></pre></div></div>
<p>Launch Raspbian Config :</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>raspi-config
</code></pre></div></div>
<h2 id="compiling-ffmpeg-in-raspbian-with-openssl">Compiling ffmpeg in Raspbian (with openssl):</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>apt-get <span class="nb">install </span>openssh
<span class="nb">sudo </span>apt-get <span class="nb">install </span>libssl-dev
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
<span class="nb">cd </span>ffmpeg
./configure <span class="nt">--prefix</span><span class="o">=</span>/home/pi/arm <span class="nt">--enable-openssl</span>
make
make <span class="nb">install</span>

<span class="c"># add the following to .bashrc file</span>
<span class="nb">export </span><span class="nv">PATH</span><span class="o">=</span><span class="nv">$PATH</span>”:<span class="nv">$HOME</span>/arm/bin”
</code></pre></div></div>

<h2 id="configuring-openvpn">Configuring OpenVPN:</h2>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>apt-get <span class="nb">install </span>network-manager-vpnc
<span class="nb">sudo </span>apt-get <span class="nb">install </span>openvpn network-manager-openvpn network-manager-openvpn-gnome
<span class="nb">sudo</span> /etc/init.d/networking restart
<span class="nb">sudo </span>openvpn <span class="nt">--config</span> <span class="k">****</span>.ovpn
</code></pre></div></div>

<p>The above will ask the username and password each time when you login. You can avoid this by storing your username and password in a text file. Following instructions below,</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>vim authorisation.txt

<span class="c">#enter the username and password as shown below</span>
username
password

<span class="c">#now find the line with "auth-user-pass" within the *.ovpn file and replace is with the following</span>
auth-user-pass authorisation.txt
</code></pre></div></div>]]></content><author><name>Real Exposer</name></author><category term="blog" /><category term="raspberrypi" /><category term="linux" /><summary type="html"><![CDATA[Useful projects links: Awesome raspberry pi]]></summary></entry><entry><title type="html">Software</title><link href="https://tech.realexposer.com/blog/software/" rel="alternate" type="text/html" title="Software" /><published>2021-10-29T19:34:30+00:00</published><updated>2021-10-29T19:34:30+00:00</updated><id>https://tech.realexposer.com/blog/software</id><content type="html" xml:base="https://tech.realexposer.com/blog/software/"><![CDATA[<h2 id="home-assistant">Home Assistant</h2>
<ul>
  <li><a href="https://www.reddit.com/r/TronScript/wiki/index/">Awesome Home Assistant</a></li>
</ul>

<h2 id="windows">Windows</h2>
<h3 id="security">Security</h3>
<ul>
  <li><a href="https://www.reddit.com/r/TronScript/wiki/index/">Tron</a></li>
</ul>]]></content><author><name>Real Exposer</name></author><category term="blog" /><category term="software" /><summary type="html"><![CDATA[Home Assistant Awesome Home Assistant]]></summary></entry><entry><title type="html">Mac Tricks</title><link href="https://tech.realexposer.com/blog/masos/" rel="alternate" type="text/html" title="Mac Tricks" /><published>2021-10-28T19:34:30+00:00</published><updated>2021-10-28T19:34:30+00:00</updated><id>https://tech.realexposer.com/blog/masos</id><content type="html" xml:base="https://tech.realexposer.com/blog/masos/"><![CDATA[<h2 id="how-to-configure-the-apple-mail-with-html-signature">How to Configure the Apple Mail with HTML Signature</h2>
<ul>
  <li>create a signature with some text (“going to edit this signature”) to identify later - Apple mail -&gt; Mail -&gt; Preferences -&gt; Signatures -&gt; Select the Email account and create the signature.</li>
  <li>Now quit the Apple Mail (by right clicking on the icon and pressing quit)</li>
  <li>Now go to one of the following directories depending on the version
    <ul>
      <li>~/Library/Mail/V2/MailData/Signatures</li>
      <li>~/Library/Mail/V3/MailData/Signatures</li>
    </ul>
  </li>
  <li>Now identify the signature (*.mailsignature) with the included text in step one by opening it is TextWrangler (otherwise cd to the above folder and run the following command)
    <ul>
      <li>open -a *.mailsignature</li>
    </ul>
  </li>
  <li>Replace the bottom part of the signature with your html code and save the file.</li>
  <li>Now right click on the file and click “Get Info” and tick the “Locked”</li>
  <li>Now open the Apple Mail and you will see the new signature when you compose a new email.</li>
</ul>]]></content><author><name>Real Exposer</name></author><category term="blog" /><category term="macos" /><summary type="html"><![CDATA[How to Configure the Apple Mail with HTML Signature create a signature with some text (“going to edit this signature”) to identify later - Apple mail -&gt; Mail -&gt; Preferences -&gt; Signatures -&gt; Select the Email account and create the signature. Now quit the Apple Mail (by right clicking on the icon and pressing quit) Now go to one of the following directories depending on the version ~/Library/Mail/V2/MailData/Signatures ~/Library/Mail/V3/MailData/Signatures Now identify the signature (*.mailsignature) with the included text in step one by opening it is TextWrangler (otherwise cd to the above folder and run the following command) open -a *.mailsignature Replace the bottom part of the signature with your html code and save the file. Now right click on the file and click “Get Info” and tick the “Locked” Now open the Apple Mail and you will see the new signature when you compose a new email.]]></summary></entry><entry><title type="html">Windows Tricks</title><link href="https://tech.realexposer.com/blog/windows-tricks/" rel="alternate" type="text/html" title="Windows Tricks" /><published>2021-10-28T19:34:30+00:00</published><updated>2021-10-28T19:34:30+00:00</updated><id>https://tech.realexposer.com/blog/windows-tricks</id><content type="html" xml:base="https://tech.realexposer.com/blog/windows-tricks/"><![CDATA[<h2 id="how-to-add-an-application-or-device-or-partition-to-send-to-menu-this-is-the-menu-accessed-by-right-clicking-on-he-desktop">How to add an application or device or partition to send to menu (this is the menu accessed by right clicking on he desktop)?</h2>
<p>Open Windows explorer (File explorer in Windows 8), and to go the address ‘shell:sendto’. Now place whatever the shortcut that needs to be displayed under send to menu.</p>

<h2 id="how-identify-the-motherboard-details-from-command-line">How identify the motherboard details from command line?</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>wmic baseboard get product,Manufacturer,version,serialnumber
</code></pre></div></div>

<h2 id="wipe-the-drives-partition-table-source">Wipe the drive’s partition table (source)</h2>
<p>Open command prompt in administrator mode</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>diskpart
list disk
<span class="k">select </span>disk <span class="c"># //# disk number based on the previous command output e.g: select disk 1</span>
clean
<span class="nb">exit</span>
</code></pre></div></div>
<p>source: http://www.howtogeek.com/215349/how-to-remove-an-efi-system-partition-or-gpt-protective-partition-from-a-drive-in-windows/</p>]]></content><author><name>Real Exposer</name></author><category term="blog" /><category term="windows" /><category term="tricks" /><summary type="html"><![CDATA[How to add an application or device or partition to send to menu (this is the menu accessed by right clicking on he desktop)? Open Windows explorer (File explorer in Windows 8), and to go the address ‘shell:sendto’. Now place whatever the shortcut that needs to be displayed under send to menu.]]></summary></entry><entry><title type="html">Excel Tricks</title><link href="https://tech.realexposer.com/blog/excel-tricks/" rel="alternate" type="text/html" title="Excel Tricks" /><published>2021-10-26T19:34:30+00:00</published><updated>2021-10-26T19:34:30+00:00</updated><id>https://tech.realexposer.com/blog/excel-tricks</id><content type="html" xml:base="https://tech.realexposer.com/blog/excel-tricks/"><![CDATA[<p>In this post we document some of the Excel tricks which you might find useful.</p>

<h2 id="how-to-copy-a-formula-to-a-range-of-cells">How to copy a formula to a range of cells</h2>
<ul>
  <li>First put your formula in F1.</li>
  <li>Now hit ctrl+C to copy your formula.</li>
  <li>Hit left, so E1 is selected.</li>
  <li>Now hit Ctrl+Down. This will travel all the way down until a blank is hit, in this example its E20000.</li>
  <li>Now hit right so F20000 is selected.</li>
  <li>Now hit ctrl+shift+up. Now you will be selecting F1:F20000.</li>
  <li>Finally either hit ctrl+V or just hit enter to fill the cells.</li>
</ul>

<p>source: http://superuser.com/questions/180345/apply-formula-to-a-range-of-cells-without-drag-and-drop</p>]]></content><author><name>Real Exposer</name></author><category term="blog" /><category term="excel" /><category term="office" /><summary type="html"><![CDATA[In this post we document some of the Excel tricks which you might find useful.]]></summary></entry><entry><title type="html">Mounting a Network Drive in Linux</title><link href="https://tech.realexposer.com/blog/mounting-network-drive/" rel="alternate" type="text/html" title="Mounting a Network Drive in Linux" /><published>2021-10-25T19:34:30+00:00</published><updated>2021-10-25T19:34:30+00:00</updated><id>https://tech.realexposer.com/blog/mounting-network-drive</id><content type="html" xml:base="https://tech.realexposer.com/blog/mounting-network-drive/"><![CDATA[<p>In this post we will look at how mount a network drive in Ubuntu. Install CIFS:</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>apt-get <span class="nb">install </span>cifs-utils
</code></pre></div></div>
<p>Mount password protected network folders<br />
Using a text editor, create a file for your remote servers logon credential:</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>gedit ~/.smbcredentials
</code></pre></div></div>
<p>Enter your Windows username and password in the file:</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">username</span><span class="o">=</span>msusername
<span class="nv">password</span><span class="o">=</span>mspassword
</code></pre></div></div>
<p>Save the file, exit the editor.<br />
Change the permissions of the file to prevent unwanted access to your credentials:</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">chmod </span>600 ~/.smbcredentials
</code></pre></div></div>
<p>Then edit your /etc/fstab file (with root privileges) to add this line (replacing the insecure line in the example above, if you added it):</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>//servername/sharename /media/windowsshare cifs <span class="nv">credentials</span><span class="o">=</span>/home/ubuntuusername/.smbcredentials,iocharset<span class="o">=</span>utf8,sec<span class="o">=</span>ntlm 0 0
</code></pre></div></div>
<p>If you want to mount the SMB drive with write access</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>//servername/sharename /media/windowsshare cifs <span class="nv">credentials</span><span class="o">=</span>/home/ubuntuusername/.smbcredentials,uid<span class="o">=</span>1000,gid<span class="o">=</span>1000,iocharset<span class="o">=</span>utf8,sec<span class="o">=</span>ntlm 0 0
</code></pre></div></div>
<p>Save the file, exit the editor.<br />
Finally, test the fstab entry by issuing:</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>mount <span class="nt">-a</span>
</code></pre></div></div>
<p>More secure way of login in: Following command will ask the password when entered:</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>mount <span class="nt">-t</span> cifs //10.1.1.1/network_share /media/mount_directory <span class="nt">-o</span> <span class="nv">sec</span><span class="o">=</span>ntlmssp,uid<span class="o">=</span>1000,gid<span class="o">=</span>1000,user<span class="o">=</span>username
</code></pre></div></div>
<p>Source: https://wiki.ubuntu.com/MountWindowsSharesPermanently</p>]]></content><author><name>Real Exposer</name></author><category term="blog" /><category term="linux" /><summary type="html"><![CDATA[In this post we will look at how mount a network drive in Ubuntu. Install CIFS: sudo apt-get install cifs-utils Mount password protected network folders Using a text editor, create a file for your remote servers logon credential: gedit ~/.smbcredentials Enter your Windows username and password in the file: username=msusername password=mspassword Save the file, exit the editor. Change the permissions of the file to prevent unwanted access to your credentials: chmod 600 ~/.smbcredentials Then edit your /etc/fstab file (with root privileges) to add this line (replacing the insecure line in the example above, if you added it): //servername/sharename /media/windowsshare cifs credentials=/home/ubuntuusername/.smbcredentials,iocharset=utf8,sec=ntlm 0 0 If you want to mount the SMB drive with write access //servername/sharename /media/windowsshare cifs credentials=/home/ubuntuusername/.smbcredentials,uid=1000,gid=1000,iocharset=utf8,sec=ntlm 0 0 Save the file, exit the editor. Finally, test the fstab entry by issuing: sudo mount -a More secure way of login in: Following command will ask the password when entered: sudo mount -t cifs //10.1.1.1/network_share /media/mount_directory -o sec=ntlmssp,uid=1000,gid=1000,user=username Source: https://wiki.ubuntu.com/MountWindowsSharesPermanently]]></summary></entry></feed>