PDA

View Full Version : Raspberry pi 3B+ (sa ruleze un post de radio)



cipryDXfeed
07-02-25, 20:47
Va salut. Vreau sa rulez cu acesta placa un anume post de radio ex : http://89.238.227.6:8002 sa porneasca automat in caz de reboot si un script sa verifice daca ruleaza acest post de radio

Vreau ceva idei daca va rog. multumesc.

---------- Post added at 20:47 ---------- Previous post was at 20:45 ----------

Eu m-am gandit cu vlc sa ruleze , am incercat ceva script - uri dar nu am reusit sa ruleze in mod automat.

mirel
07-02-25, 20:58
1️⃣ Instalarea VLC (dacă nu e deja instalat)Deschide un terminal pe Raspberry Pi și rulează:
sudo apt update && sudo apt install -y vlc

2️⃣ Crearea unui script pentru a porni automat postul de radioCreează un fișier nou, de exemplu radio.sh, și editează-l:
nano /home/pi/radio.sh

Adaugă următorul conținut:
#!/bin/bash

URL="http://89.238.227.6:8002"

# Verifică dacă VLC rulează deja
if ! pgrep -x "vlc" > /dev/null; then
cvlc --no-video "$URL" &
fi


Salvează cu CTRL+X, apoi Y și Enter.
Fă scriptul executabil:
chmod +x /home/pi/radio.sh

3️⃣ Configurarea pornirii automate la rebootAdaugă comanda în crontab pentru utilizatorul pi:
crontab -e

La sfârșitul fișierului, adaugă:


@reboot /home/pi/radio.sh


Salvează cu CTRL+X, apoi Y și Enter.
4️⃣ Script de verificare periodicăCreează un nou script pentru a verifica dacă VLC rulează și să-l repornească dacă s-a oprit.


nano /home/pi/check_radio.sh


Adaugă următorul conținut:


#!/bin/bash

URL="http://89.238.227.6:8002"

# Verifică dacă VLC rulează
if ! pgrep -x "vlc" > /dev/null; then
echo "$(date): VLC nu rulează. Se repornește..." >> /home/pi/radio.log
cvlc --no-video "$URL" &
else
echo "$(date): VLC rulează corect." >> /home/pi/radio.log
fi


Salvează și fă scriptul executabil:


chmod +x /home/pi/check_radio.sh


5️⃣ Programarea verificării automate la fiecare 5 minuteDeschide crontab:
crontab -e


Adaugă linia:


*/5 * * * * /home/pi/check_radio.sh


Aceasta va verifica și reporni VLC la fiecare 5 minute dacă s-a oprit.
Testare

Poți verifica dacă totul funcționează corect repornind Raspberry Pisudo reboot



Pentru a vedea logurile:cat /home/pi/radio.log



Acum, Raspberry Pi-ul tău va reda automat postul de radio la fiecare pornire și va verifica periodic dacă VLC este activ. ????


copy-paste din superficiala!... :))) :beer:

cipryDXfeed
07-02-25, 22:29
multumesc frumossss

check_radio.sh ruleaza manual

nu porneste in reboot sau la 5 min

---------- Post added at 22:08 ---------- Previous post was at 21:56 ----------

Fri 7 Feb 18:37:57 GMT 2025: VLC nu rulează. Se reporneste...
Fri 7 Feb 18:44:20 GMT 2025: VLC ruleaza corect.
Fri 7 Feb 18:51:13 GMT 2025: VLC nu rulează. Se reporneste...
Fri 7 Feb 18:53:13 GMT 2025: VLC ruleaza corect.
Fri 7 Feb 19:04:25 GMT 2025: VLC ruleaza corect.


ce am observat cand ramane fara net se blocheaza nu mai porneste script - ul nici manual numai dupa un reboot

auto start nu merge posibil sa fie din crontab ceva

---------- Post added at 22:29 ---------- Previous post was at 22:08 ----------

merge si crontab gresisem ceva :agresiv:

singura problema mai este : daca ramane fara net si revine netul numai merge numai dupa un reboot

mirel
07-02-25, 22:39
Dacă VLC rămâne blocat când se pierde internetul, putem modifica scriptul check_radio.sh astfel încât să detecteze și problema conexiunii și să repornească VLC dacă nu mai primește stream-ul.
???? Soluție: Verificare conexiune + repornire VLCModificăm scriptul check_radio.sh pentru a:


Verifica dacă VLC rulează.
Verifica dacă fluxul de radio este activ.
Dacă fluxul nu funcționează, oprește VLC și îl repornește.

???? Modificare check_radio.shEditează fișierul:


nano /home/pi/check_radio.sh


Șterge conținutul existent și adaugă:


#!/bin/bash

URL="http://89.238.227.6:8002"

# Verifică dacă VLC rulează
if ! pgrep -x "vlc" > /dev/null; then
echo "$(date): VLC nu rulează. Se pornește..." >> /home/pi/radio.log
cvlc --no-video "$URL" &
exit 0
fi

# Verifică dacă fluxul de radio funcționează (timeout 10 secunde)
if ! curl --silent --head --fail --max-time 10 "$URL"; then
echo "$(date): Conexiunea la radio a căzut. Se repornește VLC..." >> /home/pi/radio.log
pkill -9 vlc # Oprește VLC forțat
sleep 2 # Așteaptă puțin înainte de restart
cvlc --no-video "$URL" & # Pornește VLC din nou
else
echo "$(date): Fluxul funcționează corect." >> /home/pi/radio.log
fi


Salvează modificările (CTRL+X, apoi Y și Enter).
???? Configurare în crontabPentru a rula verificarea la fiecare 2 minute, editează crontab:


crontab -e


Adaugă:


*/2 * * * * /home/pi/check_radio.sh


Acum, dacă internetul cade și revine, scriptul va detecta și va reporni automat VLC fără să fie nevoie de reboot.
???? Testare

Oprește internetul manual (scoate cablul sau dezactivează Wi-Fi-ul).
Așteaptă 2-3 minute și reconectează internetul.
Verifică logurile pentru confirmare:

cat /home/pi/radio.log



Dacă vrei să testezi forțat, poți opri VLC manual:

pkill -9 vlc


și vezi dacă scriptul îl repornește în 2 minute.

Acum, VLC va rula fără întreruperi, chiar dacă internetul cade și revine! ????


copy-paste!..

cipryDXfeed
07-02-25, 23:01
multumesc frumos.

mai este ceva cand pica netul trebuie oprit si vlc pkill -9 vlc ca sa reporneasca automat

mirel
08-02-25, 00:06
#!/bin/bash


URL="http://89.238.227.6:8002"


# Verifică dacă VLC rulează
if ! pgrep -x "vlc" > /dev/null; then
echo "$(date): VLC nu rulează. Se pornește..." >> /home/pi/radio.log
cvlc --no-video "$URL" &
exit 0
fi


# Verifică dacă fluxul de radio funcționează (timeout 10 secunde)
if ! curl --silent --head --fail --max-time 10 "$URL"; then
echo "$(date): Conexiunea la radio a căzut. Oprire VLC..." >> /home/pi/radio.log
pkill -9 vlc # Oprește VLC forțat
sleep 5 # Așteaptă puțin
echo "$(date): Se repornește VLC..." >> /home/pi/radio.log
cvlc --no-video "$URL" & # Pornește VLC din nou
else
echo "$(date): Fluxul funcționează corect." >> /home/pi/radio.log
fi




echo "$(date): Conexiunea la radio a căzut. Oprire VLC..." >> /home/pi/radio.log
pkill -9 vlc # Oprește VLC forțat

e deja in cod

cipryDXfeed
08-02-25, 17:09
Cand opresc netul nu imi da in log Conexiunea la radio a cazut. Oprire VLC...

Nu se opreste vlc , nu reporneste numai daca ii dau manual pkill -9 vlc

cipryDXfeed
09-02-25, 20:53
Cand opresc netul in log imi zice Fluxul funcționează corect. defat nu functioneaza , cred ca nu stie ca a picat conexiunea la vlc (stream)

mirel
09-02-25, 23:28
???? Soluție mai bună

În loc să verificăm doar conexiunea, vom testa și dacă VLC redă efectiv fluxul. Facem asta citind procesul VLC și output-ul acestuia.
???? Scriptul check_radio.sh Final



#!/bin/bash

URL="http://89.238.227.6:8002"
LOGFILE="/home/pi/radio.log"

# Verifică dacă VLC rulează
if pgrep -x "vlc" > /dev/null; then
# Verifică dacă fluxul este activ (dacă VLC redă audio)
if ! cvlc --intf rc --rc-host localhost:9999 & sleep 2 && echo "status" | nc localhost 9999 | grep -q "state playing"; then
echo "$(date): VLC rulează, dar fluxul este căzut! Se repornește VLC..." >> "$LOGFILE"
pkill -9 vlc
sleep 5
cvlc --no-video "$URL" &
else
echo "$(date): VLC și fluxul funcționează corect." >> "$LOGFILE"
fi
else
echo "$(date): VLC NU rulează! Se pornește VLC..." >> "$LOGFILE"
cvlc --no-video "$URL" &
fi


???? Cum funcționează acum?

✅ Verifică dacă VLC rulează → Dacă nu, îl pornește.
✅ Verifică dacă VLC chiar redă fluxul → Dacă este blocat, VLC este închis forțat (pkill -9 vlc) și repornit.
✅ Înregistrează în radio.log ce se întâmplă, pentru debugging.
???? Configurare în crontab

Acum îl rulăm la fiecare minut:


crontab -e


Adaugă la final:



* * * * * /home/pi/check_radio.sh


???? Testare Manuală

Rulează scriptul manual pentru a verifica dacă merge corect:



bash /home/pi/check_radio.sh


Apoi, verifică logul:


cat /home/pi/radio.log


???? Acum, dacă netul pică și revine, VLC se restartează corect și radioul pornește automat fără să mai fie nevoie de reboot! ????

cipryDXfeed
10-02-25, 21:18
Eroare


pi@raspberrypi:~ $ bash /home/pi/check_radio.sh
VLC media player 3.0.21 Vetinari (revision 3.0.21-0-gdd8bfdbabe8)
[00000055898ad140] main playlist: playlist is empty
[00000055898f5730] [cli] lua interface: Listening on host "localhost:9999".
[00000055898f5730] [cli] main interface error: socket bind error: Address already in use
[00000055898f5730] [cli] main interface error: socket bind error: Address already in use
[00000055898f5730] [cli] lua interface error: Error loading script /usr/lib/aarch64-linux-gnu/vlc/lua/intf/cli.luac: lua/intf/modules/host.lua:225: Cannot listen on localhost:9999
/home/pi/check_radio.sh: line 9: nc: command not found
pi@raspberrypi:~ $

mirel
11-02-25, 00:06
???? SCRIPT NOU FĂRĂ SOCKET / PORTÎnlocuim verificarea pe port și folosim dbus-send pentru a verifica dacă VLC chiar redă fluxul.
???? check_radio.sh Final

#!/bin/bash

URL="http://89.238.227.6:8002"
LOGFILE="/home/pi/radio.log"

# Verifică dacă VLC rulează
if pgrep -x "vlc" > /dev/null; then
# Verifică dacă VLC redă audio folosind dbus
if ! dbus-send --print-reply --dest=org.mpris.MediaPlayer2.vlc \
/org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get \
string:"org.mpris.MediaPlayer2.Player" string:"PlaybackStatus" | grep -q "Playing"; then
echo "$(date): VLC rulează, dar fluxul e căzut! Se repornește VLC..." >> "$LOGFILE"
pkill -9 vlc
sleep 5
cvlc --no-video "$URL" &
else
echo "$(date): VLC și fluxul funcționează corect." >> "$LOGFILE"
fi
else
echo "$(date): VLC NU rulează! Se pornește VLC..." >> "$LOGFILE"
cvlc --no-video "$URL" &
fi


???? CRON pentru verificare automatăAdaugă în crontab -e:


* * * * * /home/pi/check_radio.sh


???? TESTARERulează manual și verifică logul:


bash /home/pi/check_radio.sh
cat /home/pi/radio.log


???? Acum scriptul funcționează fără probleme cu VLC, chiar dacă netul pică și revine! ????

cipryDXfeed
11-02-25, 20:28
se reporneste vlc la 1 min incontinuu

pi@raspberrypi:~ $ bash /home/pi/check_radio.sh
Error org.freedesktop.DBus.Error.ServiceUnknown: The name org.mpris.MediaPlayer2.vlc was not provided by any .service files
pi@raspberrypi:~ $ VLC media player 3.0.21 Vetinari (revision 3.0.21-0-gdd8bfdbabe8)
[000000559cb6f700] dummy interface: using the dummy interface module...


iar in log apare

Tue 11 Feb 19:28:01 EET 2025: VLC ruleaza, dar fluxul e cazut! Se reporneste VLC...

cipryDXfeed
14-02-25, 12:23
Mai sunt ceva sperante / idei? ????

cipryDXfeed
15-02-25, 19:34
ar mai fi varianta asta de monitorizare prin alsamixer dar nu stiu cum sa integrez in codul de sus

import os def check_alsa_audio(): status_file = "/proc/asound/card0/pcm0p/sub0/status" if not os.path.exists(status_file): print("Fișierul de status ALSA nu există. Verifică configurația audio.") return False with open(status_file, "r") as f: status = f.read() if "state: RUNNING" in status: print("Audio rulează pe ALSA!") return True else: print("Niciun sunet redat prin ALSA.") return False if __name__ == "__main__": check_alsa_audio()

---------- Post added at 19:34 ---------- Previous post was at 18:29 ----------

cam asta imi da cand ruleaza audio si cand nu ruleaza prin alsamiser

pi@raspberrypi:~ $ cat /proc/asound/card0/pcm0p/sub0/status
state: XRUN nu ruleaza audio
owner_pid : 817
trigger_time: 190.214803650
tstamp : 0.000000000
delay : 0
avail : 2982
avail_max : 2982
-----
hw_ptr : 7369255
appl_ptr : 7370683
pi@raspberrypi:~ $

----------------------------------------------------------------------

pi@raspberrypi:~ $ cat /proc/asound/card0/pcm0p/sub0/status
state: RUNNING ruleaza audio
owner_pid : 854
trigger_time: 23.790311864
tstamp : 0.000000000
delay : 3924
avail : 419
avail_max : 2422
-----
hw_ptr : 3502455
appl_ptr : 3506446
pi@raspberrypi:~ $


poate aveti experienta mai multa in linux

mirel
16-02-25, 00:56
#!/bin/bash


URL="http://89.238.227.6:8002"
LOGFILE="/home/pi/radio.log"
ALSA_STATUS_FILE="/proc/asound/card0/pcm0p/sub0/status"


# Funcție pentru verificarea sunetului prin ALSA
check_alsa_audio() {
if [ -f "$ALSA_STATUS_FILE" ]; then
if grep -q "state: RUNNING" "$ALSA_STATUS_FILE"; then
echo "$(date): Audio rulează pe ALSA!" >> "$LOGFILE"
return 0
else
echo "$(date): Niciun sunet redat prin ALSA!" >> "$LOGFILE"
return 1
fi
else
echo "$(date): Fișierul de status ALSA nu există!" >> "$LOGFILE"
return 1
fi
}


# Verifică dacă VLC rulează
if pgrep -x "vlc" > /dev/null; then
# Verifică dacă VLC chiar redă audio
if ! check_alsa_audio; then
echo "$(date): VLC rulează, dar NU redă sunet! Se repornește..." >> "$LOGFILE"
pkill -9 vlc
sleep 5
cvlc --no-video "$URL" &
else
echo "$(date): VLC și sunetul funcționează corect." >> "$LOGFILE"
fi
else
echo "$(date): VLC NU rulează! Se pornește VLC..." >> "$LOGFILE"
cvlc --no-video "$URL" &
fi






poate aveti experienta mai multa in linux
eu nu...dar stiu pe cine sa intreb!...:))))

cipryDXfeed
16-02-25, 12:13
da este functional !!! multumesc mult mirel , iti raman dator :drinks: