Membangun PLTS Atap: UPS Modif

Pertama yang ingin saya ceritakan adalah, hobi ini ternyata adalah hobi mahal. Bukan mau sombong punya hobi mahal, tapi sebagai self aware juga kalau harus penuh pertimbangan yang waras dalam menentukan prioritas, terutama buat budget terbatas seperti saya. Walaupun, ternyata hobi orang lain ternyata mahal juga, seperti hobi lari ternyata budget nya besar juga kalau nuruti yang “bagus” mulai dari spatu, outfit, wearable, dll.

Saya mulai bangun PLTS atap di rumah setelah perjalanan panjang selama dua tahun berurusan dengan energi listrik. Dua tahun lalu ketika menempati rumah sebut saja ruma A, saya membutuhkan supply listrik alternatif untuk mini PC yang tidak punya baterai seperti laptop. Supply ini saya perlukan karena sering kali listrik mati. Walaupun listrik mati hanya beberapa detik, tapi sudah membuat PC jadi restart. Kalau keseringan bisa membuat PC rusak. Jadi diperlukan semacam UPS untuk backup PLN.

UPS Modif

Perburuan di e-commerce online tentang UPS menemukan adanya UPS modif yang bisa menggunakan aki mobil dan ada kabel penghubung untuk disambung ke aki mobil di luar kotak UPS nya. Saya sampai beli dua kali karena merasa daya yang ditangani terlalu kecil, yaitu 350 VA, untuk pembelian pertama. Di pembelian kedua saya beli yang tipe 450 VA, dimana saya pikir cukup untuk menangani lampu seluruh rumah dan mini PC yang memiliki daya kecil setara dengan laptop. Pembelian kedua ini sekaligus proyeksi saya ketika pindah ke umah B, dimana saya sedang atur ulang jalur kelistrikanya pada waktu itu.

Sistem dengan UPS modif ini lumayan bertahan sekitar dua tahun belakangan sampai suatu ketika UPS nya bermasalah, yaitu ditandai dengan seringnya ELCB utama turun atau trip. Selain itu juga aki mobil yang sudah mulai drop. Hal ini teramati ketika mati lampu waktu siang dan cuma bertahan 1 jam dari yang sebelumnya bisa bertahan 3 atau 4 jam lebih. Mati lampu terakhir pas malam hari jadi was-was dan harus mematikan semua peralatan hingga tersisa peralatan minimal saja yang nyala.

Upgrade Baterai LifePo4

Dari kejadian batrei drop, saya kepikiran untuk upgrade baterai dengan tipe LifePo4 yang dikenal awet dan stabil. Pada saat itu saya sudah sering melihat vlog tentang PLTS, tetapi tidak ada niat untuk kearah sana karena budget nya yang tidak murah. Saya beli baterai 4 pcs yang 3.2 v 100Ah, kemudian saya seri dengan ditambah BMS daly yang saya beli secara terpisah.

Upgrade baterai ini saya rasa cukup sukses dan saya puas. Sistem ini bisa bertahan menangani daya 80 watt an sampai 8 jam lebih. Secara hitungan teori, dengan efisiensi 80% bakal mampu bertahan hingga 12 jam. Kapasitas ini cukup untuk backup listrik mati dengan beban hanya lampu, cctv, dan perangkat network seprti router, switch, akses poin, dll.

Menuju PLTS Atap

Ternyata kepuasan terhadap upgrade baterai tidak bertahan lama. Sekitar seminggu setelah upgrade, saya mulai membuka kemungkinan untuk masuk ke dunia PLTS. Hal ini mulai muncul karena saya berfikir sumber daya baterai yang bagus ini sangat sayang kalau sering nganggur karena listrik mati juga jarang terjadi akhir-akhir ini. Ditambah lagi, mini PC yang awalnya jadi alasan utama saya pakai sistem backup UPS ini, rusak total dan tidak bisa diperbaiki menurut dua tempat service yang saya kunjungi (motherboard kena dan gak jelas service nya bakal kayak gimana).

to be continued >>

Membuat HMVC di CodeIgniter 4

CodeIgniter 4 hadir dengan struktur yang lebih modern dan fleksibel dibanding versi sebelumnya. Salah satu pendekatan arsitektur yang sering digunakan untuk membangun aplikasi besar dengan pemisahan modul yang baik adalah HMVC (Hierarchical Model-View-Controller).

HMVC memungkinkan pengembang membagi aplikasi menjadi modul independen, sehingga setiap bagian memiliki Controller, Model, dan View sendiri. Dengan pendekatan ini, kode menjadi lebih modular, reusable, dan scalable.

Pada artikel ini, kita akan membahas cara mengimplementasikan HMVC di CodeIgniter 4, mulai dari struktur folder, konfigurasi autoloading PSR-4, hingga contoh penggunaan.

Pengertian HMVC

HMVC adalah arsitektur berbasis MVC, tetapi setiap bagian proyek terbagi ke dalam modul independen. Ini membantu dalam pemisahan fitur, sehingga pengembangan menjadi lebih mudah dan terorganisir.

Keuntungan Menggunakan HMVC

Modularitas – Setiap fitur aplikasi bisa dikelola secara terpisah dalam modul.
Reusability – Modul dapat digunakan kembali tanpa harus menulis ulang kode.
Kemudahan Pengelolaan – Mempermudah pengembangan proyek besar dengan tim.
Scalability – Memungkinkan ekspansi sistem tanpa harus merombak seluruh arsitektur.

Struktur Folder HMVC

Di CodeIgniter 4, kita dapat membuat struktur modul HMVC dalam folder app/Modules/. Berikut contoh struktur proyek dengan HMVC:

app/
├── Modules/
│   ├── Admin/
│   │   ├── Config/
│   │   │   ├── Routes.php
│   │   ├── Controllers/
│   │   │   ├── AdminController.php
│   │   ├── Models/
│   │   │   ├── AdminModel.php
│   │   ├── Views/
│   │   │   ├── admin.php
│   ├── Blog/
│   │   ├── Config/
│   │   │   ├── Routes.php
│   │   ├── Controllers/
│   │   │   ├── PostController.php
│   │   ├── Models/
│   │   │   ├── PostModel.php
│   │   ├── Views/
│   │   │   ├── post_list.php

Setiap modul memiliki Controller, Model, dan View sendiri, sehingga kode lebih terstruktur dan mudah dikelola.

Konfigurasi PSR-4 untuk Modul HMVC

Agar CodeIgniter mengenali modul tanpa perlu menuliskan path lengkap, kita harus mengatur PSR-4 autoloading.

Buka file app/Config/Autoload.php dan tambahkan modul ke dalam $psr4 :

public $psr4 = [
    'App'  => APPPATH,
    'Modules' => APPPATH . 'Modules'
];

Membuat Routes

Buat file Routes.php di dalam app/Modules/Blog/Config/Routes.php :

<?php 

namespace Modules\Blog\Config;

use CodeIgniter\Router\RouteCollection;

class Routes {
    public static function defineRoutes(RouteCollection $routes) {
        $routes->group('/blog', ['namespace' => 'Modules\Blog\Controllers'], function($routes) {
            $routes->get('/', 'PostController::index');
        });
    }
}

Mengatur Routes

Buka Routes pada app/Config/Routes.php dan tambahkan dua baris paling bawah sehingga isi routes menjadi seperti berikut:

<?php

use CodeIgniter\Router\RouteCollection;

/**
 * @var RouteCollection $routes
 */
$routes->get('/', 'Home::index');
$routes->get('user', 'Home::index');


use Modules\Blog\Config\Routes as CarRoutes;
CarRoutes::defineRoutes($routes);

Membuat Controller

Sekarang kita buat Controller di app/Modules/Blog/Controllers/PostController.php

namespace Modules\Blog\Controllers;

use CodeIgniter\Controller;
use Modules\Blog\Models\PostModel;

class PostController extends Controller
{
    public function index()
    {
        $model = new PostModel();
        $data['posts'] = $model->getPosts();

        return view('Modules\Blog\Views\post_list', $data);
    }
}

Model dan Views

Membuat model dan view sama seperti dalam MVC biasa, tinggal disesuaikan namespace dan panggil nya.

Menata Ulang Jalur Panel MCB

Dengan bertambahnya kapasitas Inverter untuk suplay tenaga listrik di rumah, maka jalur yang dibackup sama inverter yang dulunya hanya lampu saja, perlu ditambah opsi atau pilihan agar jalur lain bisa menggunakan juga. Kemampuan untuk memilih jalur ini bisa diwujudkan di panel MCB yang sudah ada.

Saya sudah menyiapkan empat jalur untuk membagi beban berdasarkan kegunaan, seperti lampu, AC, stop kontak, dan keperluan berkaitan dengan air. Untuk keperluan listrik yang berhubungan dengan air saya tambahkan ELCB 10 ma, tingkat sensitifitas lebih tinggi dari ELCB umumnya yang 30 ma.

Pemilihan jarus sumber ini saya buat di panel MCB dengan menggunakan COS atau change over switch. COS saya pasang per jalur beban, sehinga kita bisa aktifkan per jalur. Dengan konfigurasi ini kita bisa memilih untuk mengaktifkan PLTS untuk Lampu saja atau kombinasi dengan yang lain.

Membuat Docker Compose untuk CodeIgniter 4 dengan Apache, PostgreSQL, dan pgAdmin

Docker telah menjadi solusi populer dalam pengembangan aplikasi karena kemampuannya dalam mengelola lingkungan secara konsisten. Dalam artikel ini, kita akan membahas cara membuat Docker Compose untuk menjalankan CodeIgniter 4 dengan Apache, PostgreSQL, dan pgAdmin. Konfigurasi ini juga akan mengaktifkan ekstensi PHP intl, pgsql, dan mod_rewrite menggunakan Dockerfile untuk pengaturan yang lebih fleksibel

Struktur Folder

pastikan struktur proye seperti berikut

/project-root
├── docker-compose.yml
├── Dockerfile

Setiap layanan memiliki folder dan Dockerfile sendiri agar dapat dikustomisasi secara modular.

Konfigurasi Dockerfile untuk Codeigniter 4

Buat file app/Dockerfile untuk PHP dengan Apache, mengaktifkan ekstensi yang dibutuhkan seperti pgsql, intl, dan mengaktifkan mod_rewrite:

# Menggunakan image dasar PHP dengan Apache
FROM php:8.2-apache

# Perbarui package manager dan install ekstensi yang diperlukan
RUN apt-get update && apt-get install -y \
    libicu-dev \
    libpq-dev \
    unzip

# Aktifkan ekstensi PHP Intl dan PostgreSQL
RUN docker-php-ext-install intl pgsql

# Aktifkan mod_rewrite Apache
RUN a2enmod rewrite

# Restart Apache agar perubahan berlaku
RUN service apache2 restart

EXPOSE 80
CMD ["apache2-foreground"]

Konfigurasi Docker Compose

Buat file docker-compose.yml untuk menghubungkan semua layanan:

version: '3.8'

services:
  app:
    build: .
    container_name: codeigniter4_app
    restart: always
    volumes:
      - ./html:/var/www/html
    ports:
      - "8080:80"
    depends_on:
      - db
    environment:
      - CI_ENV=development
    networks:
      - ci_network

  db:
    image: postgres:15
    container_name: ci4_postgres
    restart: always
    environment:
      POSTGRES_USER: ci4_user
      POSTGRES_PASSWORD: ci4_password
      POSTGRES_DB: ci4_database
    volumes:
      - ./postgresql/data:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    networks:
      - ci_network

  pgadmin:
    image: dpage/pgadmin4
    container_name: pgadmin_ci4
    restart: always
    environment:
      PGADMIN_DEFAULT_EMAIL: [email protected]
      PGADMIN_DEFAULT_PASSWORD: adminpassword
    ports:
      - "5050:80"
    depends_on:
      - db
    networks:
      - ci_network

networks:
  ci_network:
    driver: bridge

Menjalankan Docker Compose

Setelah semua konfigurasi selesai, jalankan perintah berikut untuk membangun semua layanan:

docker-compose up --build -d

Menghubungkan Node-RED dengan Blynk

Seharian penuh saya mengikuti dokumentasi cara menghubungkan Node-RED dengan Blynk, tetapi tidak membuahkan hasil. Disitu dijelaskan beberapa garis besar tahapnya, yaitu menyiapkan template di Blynk, Install Node-RED, Konfigurasi MQTT Broker, Buat Node-RED flow, Jalankan.

Dari sekian langkah diatas, saya terganjal di Konfigurasi MQTT Broker. Diutak-atik tetep statusnya connecting alias tidak berhail connect dengan Blynk. Padahal semua langkah sudah saya ikuti. Kemudian saya berhenti menggunakan cara ini dan mulai berfikir untuk menggunakan cara lain.

Cara yang lain yaitu pakai add-on, plugin, atau di Node-RED disebutnya pallet. Saya coba install ternyata ada kendala juga. Jadi, Node-RED saya ini diinstall di containernya docker. Dan menurut beberapa info, error ini disebabkan oleh problem DNS. Saya coba masuk ke container dan coba ping ke domain google memang tidak bisa tetapi kalau ping alamat IP di internet bisa.

Saya cari cara untuk setting DNS di docker container dan menemukan cara setting pakai docker compose. Dengan kata lain, saya perlu membuat ulang containernya dengan cara docker compose down kemudian nyalakan lagi dengan docker compose up. Cara ini beresiko hilangnya data, dan benar saja, data influxdb hilang, dan memang container influxdb ini dulu seingat saya masih ada masalah dengan persisten data nya. Singkat cerita akhirnya berhasil setting DNS dengan cara ini sekaligus perbaiki persisten data untuk influxdb juga di docker compose.

Saya pakai node-red-contrib-blynk-iot dan alhamdulillah berhasil connect atau tersambung dengan Blynk cloud. Selanjutnya tinggal setting di sisi Blynk untuk menerima data dan menampilkannya di dalam dashboard web dan mobile.