Eric Verlooij

Eric Verlooij

Aan/uit-knop op je raspberry


Hoe geniaal een raspberry Pi ook in elkaar zit, soms heb je gewoon behoefte aan iets simpels als een aan/uit-knop. Een laat die er nou niet op zitten. Maar het is gelukkig erg eenvoudig om er zelf een te klussen.

Aanschakelen

Als je met pin 5 en 6 van je gpio 3 seconden met een vrouwelijk dupont draadje verbindt op het moment dat je pi in slaapstand staat schiet hij wakker. Zet er een momentum-knopje tussen en je hebt een aan-schakelaar. Dat was niet zo moeilijk toch?

Uitzetten

Het handig zijn als je op dezelfde manier ook gelijk als uitschakelaar zou werken, maar daar moeten we eerst nog wat voor doen. We maken een python-script wat naar gpio poortje 5 luistert en op het moment dat hij ziet dat het knopje wordt ingedrukt een schutdown-request verstuurd. Open met onderstaand commando een editor.

sudo pico /usr/local/bin/power-switch.py

Plaats daarin dit pythonscript:

import threading, subprocess
import RPi.GPIO as GPIO

if __name__ == '__main__':
    try:
        GPIO.setmode(GPIO.BOARD)
        GPIO.setup(5, GPIO.IN)
        GPIO.wait_for_edge(5, GPIO.RISING)
        pin = GPIO.wait_for_edge(5, GPIO.FALLING, timeout=3000)
        if pin is None:
            subprocess.call('sudo shutdown -h now', shell=True)
        else:
            subprocess.call('sudo reboot', shell=True)
    finally:
        GPIO.cleanup()

Als je dit script je start en je drukt het eerder gemaakte knopje 3 seconden in dan wordt er een shutdown naar je raspberry gestuurd en schiet hij in slaapstand. Druk je hem korter van 3 seconden in dan doet hij een reboot. Vind je dit te lang of te kort pas dan de timeout in het script aan. Hij staat nu op 3000 miliseconden.

Nu gaan we het zo instellen dat hij dit scriptje automatisch start als je jouw pi aanzet. Open /etc/rc.local in een editor naar keuze, bijvoorbeeld pico.

sudo pico /etc/rc.local

Zet ergens in dit script maar boven “exit 0” onderstaand commando

python3 /usr/local/bin/power-switch.py &

Dat is alles

We zijn er. Nog een keer moet je je pi uitzetten door “sudo shutdown” te geven en daarna heb je een eigenhandig aangesloten knopje voor. Vanaf nu kan je jouw pi aanzetten door het knopje 3 seconden in te drukken en op de zelfde manier weer uitzetten.

Mounten via sftp

Soms heb je alleen via sftp toegang tot schijf of map en wil je die toch mounten. Dankzij het gratis programma curlftps kan dat. Eerst even installeren:

apt-get install curlftpfs

Dan maak je met mkdir een mapje aan. Dit mapje wordt straks de plek waar je de ftp-map terug gaat vinden. Dit kan je bijvoorbeeld doen in /mnt. Dat is wel zo overzichtelijk, maar het mag in principe overal.

# mkdir /mnt/mijnftpmap

Nu gebruiken we curlftpfs om te mounten naar de ftp site. Stel dit zijn de gegevens.

  • username: gebruikersnaam
  • password: wachtwoord
  • host/IP: 192.168.1.123

En dan maken we verbinding op deze manier:

# curlftpfs gebruikersnaam:wachtwoord@192.168.1.123/mnt/mijnmap/ /mnt/mijnfptmap

Hartstikke leuk, maar nu willen we nog dat iedereen toegang heeft tot deze map. Dat kan met de parameter -o aan te roepen met allow_other. Je moet dan wel in /dev/fuse.conf de # voor user_allow_other weghalen.

# curlftpfs -o allow_other gebruikersnaam:wachtwoord@192.168.1.123/mnt/mijnmap/ /mnt/mijnftpmap

Deze mount is niet persistent. Bij de eerstvolgende reboot ben je hem weer kwijt. Wil je dit niet? Dan zal je er voor moeten zorgen dat jouw machine dit commando voortaan automatisch uitvoert bij elke reboot. Bijvoorbeeld door onderstaande regel aan je crontab toe te voegen

@reboot curlftpfs gebruikersnaam:wachtwoord@192.168.1.123/mnt/mijnmap/ /mnt/mijnftpmap

Chatten via netcat

Stel: je hebt 2 machines die allebei achter nat van 2 verschillende routers op verschillende ip-adressen staan en die je met elkaar wilt laten babbelen via netcat. Omdat je geen toegang hebt tot de router, zal je het zonder portforwarding moeten doen.

Je kan wel een listener starten die op de wanpoort luistert, maar daarmee is de poort naar buiten nog niet geopend. Nat staat geen verkeer naar binnen toe dus er kan geen verbinding opgebouwd worden. De truuk is om eerst met netcat een verbinding naar buiten te openen en die te pipen naar een listener die zijn kunstje doet op het net geopende poortje. In dit voorbeeld gebruik ik poortje 6543, maar dat kan in principe elk poort tot 65000 zijn. Soms is het even zoeken naar een ongebruikt poortje. Zeker de 1e paar duizend zijn veelal gebruikt door de bekendere protocollen.

Machine 1 wordt de listener, daar type je:

nc [ipadres-machine-2] 6543 <&1 | netcat -vv -l 0.0.0.0 6543

Machine 2 gaat met de listener verbinden.

nc [ipadres-machine-2] 6543

Maak een netwerkpinter van je ouwe USB-printer

Regelmatig kan je op Amazon laserprinters kopen voor prikkie. Vaak al onder de €50. Dit zijn meestal behoorlijk oude modellen die je alleen met een USB kabel kan gebruiken. Let er dus goed op dat de toner nog goed verkrijgbaar is. Ondanks het ontbreken van een netwerk printfunctie doen het vaak prima. Alleen als je dan met het hele gezien er op wil printen dan blijf sjouwen en je kabels wisselen.

Er zijn handige kastjes te koop die netwerprintertje voor je spelen. Bijvoorbeeld bij bol.com. Maar die kosten toch al snel 50 euro. Dat kan veel goedkoper als je het zelf maakt met een Raspberry Pi.

Daarom gaan we de printer aansluiten op een Raspberry Pi en installeren daarop het CUPS. Een printerserver die er voor gaat zorgen dat we via het netwerk onze printopdrachten kunnen sturen.

CUPS is niet veeleisend. De simpelste Raspberry Pi model volstaat. Zelfs een Raspberry Pi Zero van €5,50 volstaat. Een SD kaart met 8Gb opslag is voldoende. Als je een beetje scharrelt kan je voor minder dan een tientje netwerkfunctionaliteit aan zo’n spotgoedkope laserprinter toevoegen.

We beginnen met het installeren van CUPS

sudo apt-get install cups

CUPS heeft een heleboel dependencies nodig, dus het kan wel even duren voor die klaar is.

Daarna voegen we user pi toe, zodat je straks op de webinterface met je pi-account kan inloggen.

sudo usermod -a -G lpadmin pi

CUPS is nu geinstalleerd. Open jouw browser op de Raspberry Pi en surf je naar:

http://localhost:631/

Via de webinterface kan je je printer toevoegen. Kies hiervoor “Administratie” gevolgd door “Add Printer”. Als je aangeeft dat je de printer met iedereen in je netwerk wil delen kan iedereen los.

Het is slim om onderstaande 2 radiobuttons aan te vinden, zodat je overal vanuit je netwerk jouw printopdrachten kan sturen en bij de webinterface kan zodat je bijvoorbeeld ook een printjob kan cancellen.

  •  Share printers connected to this system
  •  Allow remote administration

Nu wordt het tijd om de netwerkprinter toe te gaan voegen. Met een beetje mazzel zien ze hem gelijk en voeg je hem met een keer klikken toe. Andere kan je bij printers de naam van de printer op zoeken en hem toevoegen “by name”. In mijn geval ziet zo’n link er dan zo uit.

http://192.168.1.116:631/printers/HP_Laserprinter

Werkt mijn DNS nou wel of niet?

Bij sommige netwerkproblemen denk je misschien dat jouw dns het probleem is. Sommige sites laden wel andere niet.

In powershell kan je bijvoorbeeld met “Test-NetConnection -ComputerName google.com” testen of jouw dns het ip-adres van google wel kan vinden en of het lukt om daar een verbinding mee op te bouwen. Maar ja, allicht wist windows het dat ip-adres nog van een vorige sessie. Daarom is het handig om hetzelfde commando uit te voeren op een website waarvan je 100% zeker weet dat je die nog nooit eerder hebt bezocht, maar ook zeker weeet dat hij echt bestaat. Dat wordt lastig! Maar gelukkig zijn er sites die alle subdomeinen accepteren. Zoals mygb.nl. Dus je kan gewoon naar verzinhetmaarzogekalsjewilt.mygb.nl surfen en je zal zien dat je daar een webpagina aantreft.

Test-NetConnection -ComputerName sasasdfasdfaddsdf.mygb.nl 
ComputerName : sasasdfasdfaddsdf.mygb.nl 
RemoteAddress : 149.210.220.207 
InterfaceAlias : Ethernet 
SourceAddress : 192.168.1.104 
PingSucceeded : True 
PingReplyDetails (RTT) : 12 ms

Headless jouw raspberry installeren

Als je een raspberry image download dan heb je standaard geen mogelijkheid om daar van buitenaf toegang toe te krijgen. Met sudo raspi-config kan je dat eenvoudig instellen, maar dan moet je wel eerste een beeldscherm, toetsenbord en muis aansluiten. Soms heb je daar helemaal geen zin in, of mogelijkheden voor.

SSH

De oplossing is vrij eenvoudig. Nadat je Raspbean heb geïnstalleerd op het sd-kaartje zet je een leeg bestandje met de naam SSH (let op de hoofdletters) in de rootmap van het ssd-kaartje. Als raspbean dan de eerste keer opstart

WIFI

Als we dan toch alles aan het instellen zijn, laten we dan ook maar gelijk de wifi instellen. Plaats in de root map een bestand met de naamwpa_supplicant.conf. In dat bestandje vul je dan de landcode, de SSID en het wachtwoord in. Hieronder een voorbeeld

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=<Insert 2 letter ISO 3166-1 country code here>

network={
 ssid="<Name of your wireless LAN>"
 psk="<Password for your wireless LAN>"
}

PiHole flushen

Hieronder een kort shell script waarmee je je PI-Hole kan flushen. De hele log is dan weer leeg.

#!/bin/bash

cd /etc/pihole
sudo service pihole-FTL stop
sudo mv pihole-FTL.db pihole-FTL.db.old
sudo service pihole-FTL start

Curl via een proxy

Een proxy is een dienst die voor jou vanaf zijn eigen ip-adres een webpagina ophaalt. Dat kan heel handig zijn om bepaalde beperkingen te omzeilen.

Op het internet zijn talloze gratis en betaalde proxyservers te vinden. Op free-proxy-list.net/ vind je een lijst van gratis proxy’s. Deze lijst wordt elke 10 minuten gecontroleerd wordt.

<?php 
$proxy = 'gate.smartproxy.com:7000'; 
$target = curl_init('http://ip.smartproxy.com/'); 
curl_setopt($target, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($target, CURLOPT_PROXY, $proxy); 
$result = curl_exec($target); 
curl_close($target); 
if ($result) 
echo $result; 
?> 

Spideren

Veel grotere websites hebben wel iets van spiderprotectie. Een ervan is dat ze niet toestaan om in korte tijd te veel requests af te vuren. Hoe handig is het dan als jij jouw requests via een handjevol proxyservers kan laten verlopen.

curl -x proxyserver.example:8080 https://www.nu.nl

Alias

Ja kan natuurlijk ook een alias aanmaken, zodat voortaan alle curl-opdrachten over de door jou gekozen proxy lopen.

alias curl="curl -x proxyserver.example:8080"

Bestanden vinden met zoekterm

Ben je op zoek naar een bestandje maar weet je niet meer hoe het bestand heette dan kan je in powershell een klein script je schrijven en het toch te vinden. Stel je zoekt een txt of csv bestand waar het woord aap of konijn in voorkomt. Dan doet dit sciptje dat voor je.
Noem het script bijvoorbeeld: zoek.ps1

$searchWords = 'aap','konijn'

Foreach ($sw in $searchWords)
{
    Get-Childitem -Path "d:\" -Recurse -include "*.txt","*.csv" | 
    Select-String -Pattern "$sw" | 
    Select Path,LineNumber,@{n='SearchWord';e={$sw}}
}

Omdat je niet zo maar een powershell scipt kan starten moet je daar eerst toestemming voor geven. Daarna kan je met ./zoek.ps1 het script draaien

Set-ExecutionPolicy RemoteSigned

Grootste bestanden vinden

Je harde schijf is bijna vol zegt Windows, maar je hebt geen idee hoe het kan. Probeer dan eens onderstaande commando in powershell. Het toont de 25 grootste bestanden. Als je echt alle bestanden wil doorzoeken zal je powershell wel als adminstrator moeten draaien.

gci -r| sort -descending -property length | select -first 25 name, length

Nou wil je waarschijnlijk ook wel weten waar de bestanden staan. Om ook het path te tonen vervangen we name door Fullname

gci -r| sort -descending -property length | select -first 25 Fullname, length

Onderstaand script is helemaal de bom. Hij doorzoekt je c:\schijf en dan toont hij de de gevonden bestanden in een grid zodat je gelijk mee aan de slag kan.

Get-ChildItem -Path 'C:\' -Recurse -Force -File | Select-Object -Property FullName,@{Name='SizeGB';Expression={$_.Length / 1GB}},@{Name='SizeMB';Expression={$_.Length / 1MB}},@{Name='SizeKB';Expression={$_.Length / 1KB}} | Sort-Object { $_.SizeKB } -Descending | Out-GridView
« Oudere berichten

© 2024 Eric Verlooij

Thema gemaakt door Anders NorenBoven ↑