Problemen Sudo Ubuntu 20.04 Raspberry Pi 4

Omdat mijn Ubuntu 20.04 server installatie op de Raspberry Pi ineens problemen met sudo had en ik hier lange tijd mee bezig geweest ben om dit op te lossen, deel ik hierbij de genomen stappen om dit te verhelpen.

Op de Raspberry Pi zelf inloggen met een gebruikersaccount en vervolgens:

systemctl rescue

Je komt nu in rescue mode. Enter door totdat je opnieuw in de shell bent.

Voer volgende opdracht uit:

chown root:root /usr/bin/sudo && chmod 4755 /usr/bin/sudo

Als het goed is werkt nu alles na een reboot weer!

Tailwind CSS installeren

In de hoofdmap van het Laravel project voer je de volgende opdrachten uit:

npm install tailwindcss
npm install
npm run dev
npx tailwind init

Bestand webpack.mix.js verander je naar:

const mix = require('laravel-mix');
const tailwindcss = require('tailwindcss');


mix.js('resources/js/app.js', 'public/js')
    .postCss('resources/css/app.css', 'public/css', [
        require('tailwindcss'),
    ]);

i

Open resources/css/app.css en plaats de volgende code:

@tailwind base;
@tailwind components;
@tailwind utilities;

Voer daarna opnieuw de volgende opdracht uit:

npm run dev

Database instellen

De database-instellingen voor Laravel moeten ingesteld worden in de volgende bestanden:

.env

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=

/config/database.php

 'default' => env('DB_CONNECTION', 'mysql'),

 'mysql' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'prefix_indexes' => true,
            'strict' => true,
            'engine' => null,
            'options' => extension_loaded('pdo_mysql') ? array_filter([
                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
            ]) : [],
        ],

Nieuw Laravel-project opstarten

Om een Laravel project te starten zijn PHP en Composer nodig. Ik ga er van uit dat PHP al geinstalleerd is. Om composer te installeren kun je volgende opdrachten gebruiken (getest op Raspbian 8 Jessie):

wget -O composer-setup.php https://getcomposer.org/installer
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
rm -rf composer-setup.php

Na succesvolle installatie van Composer kun je een Laravel project aanmaken:

composer create-project laravel/laravel <projectnaam>

Om project met naam dennisbor-laravel te maken gebruik je dus volgende opdracht:

composer create-project laravel/laravel dennisbor-laravel

Na enige tijd is het project aangemaakt en is de subfolder met de projectnaam aangemaakt. Open de map via:

cd dennisbor-laravel

Je kunt het project nu starten met volgende opdracht:

php artisan serve

Er wordt nu getoond hoe het project te bereiken is:

[Sun May 16 13:03:56 2021] PHP 8.0.5 Development Server (http://127.0.0.1:8000) started

Je kunt natuurlijk ook zorgen dat je via je huidige webserver het project kunt bereiken, zorg er dan wel voor dat de ‘/public’ map de root-map wordt.

Belangrijk is ook dat de webserver kan schrijven naar de mappen ‘storage’ en ‘bootstrap/cache’.

Geroote Toon in de Apple Woning-app

Na het rooten van je Toon verlies je natuurlijk de bediening op afstand via de Toon-app van Eneco. Nu zijn er wel alternatieven voor oa Android maar voor Apple is er nog weinig te vinden. Om toch de thermostaat via een Apple-apparaat te kunnen bedienen, is het mogelijk om deze via Homebridge te koppelen.

Wat heb je nodig?

  • een apparaat waar Homebridge op draait, bijvoorbeeld een Raspberry Pi. Met Homebridge kun je apparaten die niet standaard compatible zijn met Apple HomeKit toch verbinden.
  • wat Linux kennis.
  • het IP-adres van je geroote Toon.

Installeer de ‘homebridge-rootertoon’ plugin voor homebridge met het volgende commando:

npm install -g --unsafe-perm homebridge-rootedtoon

Open het configuratiebestand van HomeBridge. Ik ben meerdere locaties van het configuratiebestand tegengekomen. In mijn huidige installatie was de locatie /var/lib/homebridge/config.json.

nano /var/lib/homebridge/config.json

Voeg de accessoire ‘RootedToon’ toe aan het configuratiebestand.

{
   "accessory": "RootedToon",
   "name": "Toon Thermostaat",
   "apiroute": "http://192.168.0.XXX",
   "maxTemp": 25,
   "minTemp": 15,
   "manufacturer": "Eneco",
   "model": "RootedToon",
   "serial_number": "xxx.xxx.xxx.xxx"
}

Achter ‘apiroute’ vul je ‘http://’ gevolgd door het IP-adres van je geroote toon in. Achter ‘maxTemp’ kun je de maximaal instelbare temperatuur instellen, achter ‘minTemp’ kun je de minimaal instelbare temperatuur instellen.

Sla het bestald op en herstart homebridge:

systemctl restart homebridge

In de Woning-app heb je nu een nieuwe accessoire, instelbaar tussen de opgegeven temperaturen!

Pond[CTRL] Update

Na een van de laatste updates waarbij de uptime doorgegeven werd aan de API, werd duidelijk dat de firmware 1 of 2 keer per dag herstart werd zonder duidelijke reden. Binnen 10 seconden werkt de module weer na een herstart, maar dit is natuurlijk niet de bedoeling.

Er wordt nu een herstart-reden doorgegeven aan de API en bij een /get-aanvraag, waardoor ik hopelijk de reden kan achterhalen.

Debug toont nu ‘4’, waarbij de reden van herstart volgens onderstaande tabel een ‘software reset’ was. Dit klopt en was na bijwerken naar firmware versie 1222.

Ondanks dat ‘4’ natuurlijk een numerieke waarde is, wordt deze in het JSON-resultaat als string weergegeven. De reden hiervan is dat de ‘debug’-parameter alle mogelijke informatie, opgeslagen als string, kan bevatten.

Tabel met mogelijke redenen, opgave van fabrikant WiFi-module (Espressif).
Huidige firmwareversie: 1222

Pond[CTRL] Update

Kleine update gemaakt, waarbij de resterende voederpauze-tijd nu beschikbaar is. Deze wordt vanaf nu ook in de online app weergegeven.

Er wordt nu ‘Feed’ samen met de resterende tijd weergegeven in plaats van enkel ‘Feeding’. Dit is mogelijk door de nieuwe parameter ‘feedpause_remaining’ in een /get-aanvraag.
Huidige firmwareversie: 1221