updates raspis to new os based on bookworm
This commit is contained in:
parent
7776095180
commit
7501ef18a4
|
@ -2,3 +2,6 @@ ve_*
|
||||||
/server/scripts/docker-images/tagspace/tagspaces
|
/server/scripts/docker-images/tagspace/tagspaces
|
||||||
/server/scripts/docker-images/tagspace/*.zip
|
/server/scripts/docker-images/tagspace/*.zip
|
||||||
*.img
|
*.img
|
||||||
|
/music
|
||||||
|
__pycache__
|
||||||
|
/roles/pi-squeezeserver/backup
|
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
"python.linting.pylintEnabled": false,
|
||||||
|
"python.linting.enabled": true,
|
||||||
|
"python.linting.flake8Enabled": true
|
||||||
|
}
|
53
full.yml
53
full.yml
|
@ -1,21 +1,14 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
- hosts: bedroompi, kitchenpi
|
#- hosts: esszimmerradio
|
||||||
roles:
|
# roles:
|
||||||
- pi-dhtsensor
|
# - pi-standard-setup
|
||||||
|
# - pi-squeezelite-custom
|
||||||
|
# - pi-shairport
|
||||||
|
# - pi-lirc
|
||||||
|
# - pi-sispmctl
|
||||||
- hosts: esszimmerradio
|
#
|
||||||
roles:
|
|
||||||
- pi-standard-setup
|
|
||||||
- pi-squeezelite-custom
|
|
||||||
- pi-shairport
|
|
||||||
- pi-lirc
|
|
||||||
- pi-sispmctl
|
|
||||||
|
|
||||||
- hosts: musikserverwohnzimmeroben
|
- hosts: musikserverwohnzimmeroben
|
||||||
roles:
|
roles:
|
||||||
- pi-standard-setup
|
- pi-standard-setup
|
||||||
|
@ -26,17 +19,27 @@
|
||||||
- pi-dhtsensor
|
- pi-dhtsensor
|
||||||
- pi-squeezeserver
|
- pi-squeezeserver
|
||||||
|
|
||||||
- hosts: bedroompi, kitchenpi
|
|
||||||
roles:
|
|
||||||
- pi-standard-setup
|
|
||||||
- pi-squeezelite-custom
|
|
||||||
- pi-shairport
|
|
||||||
- pi-lirc
|
|
||||||
- pi-dhtsensor
|
|
||||||
|
|
||||||
- hosts: octopi
|
#- hosts: kitchenpi
|
||||||
roles:
|
# roles:
|
||||||
- pi-dhtsensor
|
# - pi-standard-setup
|
||||||
|
# - pi-hifiberry-amp
|
||||||
|
# - pi-squeezelite-custom
|
||||||
|
# - pi-shairport
|
||||||
|
# - pi-lirc
|
||||||
|
# - pi-dhtsensor
|
||||||
|
|
||||||
|
#- hosts: bedroompi
|
||||||
|
# roles:
|
||||||
|
# - pi-standard-setup
|
||||||
|
# - pi-squeezelite-custom
|
||||||
|
# - pi-shairport
|
||||||
|
# - pi-lirc
|
||||||
|
# - pi-dhtsensor
|
||||||
|
|
||||||
|
#- hosts: octopi
|
||||||
|
# roles:
|
||||||
|
# - pi-dhtsensor
|
||||||
|
|
||||||
|
|
||||||
#- hosts: newrpi
|
#- hosts: newrpi
|
||||||
|
|
|
@ -28,9 +28,10 @@ all:
|
||||||
esszimmerradio: # oben, eltern
|
esszimmerradio: # oben, eltern
|
||||||
squeezelite_name: Esszimmer
|
squeezelite_name: Esszimmer
|
||||||
shairport_name: _Oben_Esszimmer
|
shairport_name: _Oben_Esszimmer
|
||||||
alsa_card_name: Device
|
#alsa_card_name: Device
|
||||||
squeezeserver: 192.168.178.100
|
squeezeserver: 192.168.178.100
|
||||||
configure_wifi: true
|
configure_wifi: true
|
||||||
|
alsa_card_name: 1
|
||||||
musikserverwohnzimmeroben: # oben, eltern
|
musikserverwohnzimmeroben: # oben, eltern
|
||||||
squeezelite_name: Wohnzimmer
|
squeezelite_name: Wohnzimmer
|
||||||
shairport_name: _Oben_Wohnzimmer
|
shairport_name: _Oben_Wohnzimmer
|
||||||
|
@ -57,6 +58,6 @@ all:
|
||||||
squeezeserver: 192.168.178.80
|
squeezeserver: 192.168.178.80
|
||||||
router_ip: 192.168.178.1
|
router_ip: 192.168.178.1
|
||||||
home_assistant_url: https://ha.bauer.tech
|
home_assistant_url: https://ha.bauer.tech
|
||||||
home_assistant_token: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiIxNjkxMWIzZmQ4ZWU0NDI0OTg0MjA0ZDllMDhkNGRlMCIsImlhdCI6MTU3ODE3MDU5MSwiZXhwIjoxODkzNTMwNTkxfQ.i7CdXEZy9DV9KPHAl-msK0rOfIUlPYo4zwwJ4UGhXuc
|
home_assistant_token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJkM2QxYjAwYjkxZjY0MWVhYjA4YmZhMDYwYTg3YjRhNyIsImlhdCI6MTcwNDI3MDU5MSwiZXhwIjoyMDE5NjMwNTkxfQ.dzvejgEQd9hf-Yftzd7NkR5pv76GaLFczeOy-a2pa1o
|
||||||
configure_wifi: false
|
configure_wifi: false
|
||||||
wifi_ssid: BauerWLAN
|
wifi_ssid: BauerWLAN
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
import asyncio
|
||||||
|
from bleak import BleakScanner
|
||||||
|
|
||||||
|
|
||||||
|
async def main():
|
||||||
|
stop_event = asyncio.Event()
|
||||||
|
|
||||||
|
# TODO: add something that calls stop_event.set()
|
||||||
|
|
||||||
|
def callback(device, advertising_data):
|
||||||
|
print("device", device.address, "advertising_data", advertising_data)
|
||||||
|
# TODO: do something with incoming data
|
||||||
|
pass
|
||||||
|
|
||||||
|
async with BleakScanner(callback, scanning_mode="active") as scanner:
|
||||||
|
# Important! Wait for an event to trigger stop, otherwise scanner
|
||||||
|
# will stop immediately.
|
||||||
|
await stop_event.wait()
|
||||||
|
|
||||||
|
# scanner stops when block exits
|
||||||
|
...
|
||||||
|
|
||||||
|
asyncio.run(main())
|
|
@ -0,0 +1,38 @@
|
||||||
|
import asyncio
|
||||||
|
import logging
|
||||||
|
from bleak import BleakClient, BleakScanner
|
||||||
|
from bleak.assigned_numbers import AdvertisementDataType
|
||||||
|
from bleak.backends.bluezdbus.advertisement_monitor import OrPattern
|
||||||
|
from bleak.backends.bluezdbus.scanner import BlueZScannerArgs
|
||||||
|
|
||||||
|
async def scan():
|
||||||
|
args = BlueZScannerArgs(
|
||||||
|
or_patterns=[OrPattern(0, AdvertisementDataType.MANUFACTURER_SPECIFIC_DATA, b"\x10\x05")]
|
||||||
|
)
|
||||||
|
|
||||||
|
async with BleakScanner(bluez=args, scanning_mode="passive") as scanner:
|
||||||
|
async for _, advertisement_data in scanner.advertisement_data():
|
||||||
|
mfr_data = advertisement_data.manufacturer_data
|
||||||
|
if mfr_data.get(0x02e1):
|
||||||
|
logging.info("scan(): found correct device: %s", mfr_data)
|
||||||
|
else:
|
||||||
|
logging.info("scan(): this should never happen: %s", mfr_data)
|
||||||
|
|
||||||
|
async def connect():
|
||||||
|
device1 = await BleakScanner.find_device_by_address("01:B6:EC:10:CB:8F")
|
||||||
|
|
||||||
|
async with BleakClient(device1):
|
||||||
|
logging.info("connect(): connected to device")
|
||||||
|
await asyncio.sleep(60)
|
||||||
|
|
||||||
|
async def main():
|
||||||
|
logging.info("main(): starting scan")
|
||||||
|
asyncio.create_task(scan())
|
||||||
|
await asyncio.sleep(30)
|
||||||
|
|
||||||
|
logging.basicConfig(
|
||||||
|
level=logging.INFO,
|
||||||
|
format="%(asctime)-15s %(name)-8s %(levelname)s: %(message)s",
|
||||||
|
)
|
||||||
|
|
||||||
|
asyncio.run(main())
|
|
@ -0,0 +1,92 @@
|
||||||
|
import asyncio
|
||||||
|
from bleak import BleakScanner
|
||||||
|
from bleak.assigned_numbers import AdvertisementDataType
|
||||||
|
from bleak.backends.bluezdbus.advertisement_monitor import OrPattern
|
||||||
|
from bleak.backends.bluezdbus.scanner import BlueZScannerArgs
|
||||||
|
from Crypto.Cipher import AES
|
||||||
|
from typing import Dict
|
||||||
|
|
||||||
|
irks = {
|
||||||
|
"aa67542b82c0e05d65c27fb7e313aba5": "martins_apple_watch",
|
||||||
|
"840e3892644c1ebd1594a9069c14ce0d" : "martins_iphone",
|
||||||
|
}
|
||||||
|
|
||||||
|
def resolve_rpa(rpa: bytes, irk: bytes) -> bool:
|
||||||
|
"""Compares the random address rpa to an irk (secret key) and return True if it matches"""
|
||||||
|
assert len(rpa) == 6
|
||||||
|
assert len(irk) == 16
|
||||||
|
|
||||||
|
key = irk
|
||||||
|
plain_text = b'\x00' * 16
|
||||||
|
plain_text = bytearray(plain_text)
|
||||||
|
plain_text[15] = rpa[3]
|
||||||
|
plain_text[14] = rpa[4]
|
||||||
|
plain_text[13] = rpa[5]
|
||||||
|
plain_text = bytes(plain_text)
|
||||||
|
|
||||||
|
cipher = AES.new(key, AES.MODE_ECB)
|
||||||
|
cipher_text = cipher.encrypt(plain_text)
|
||||||
|
return cipher_text[15] == rpa[0] and cipher_text[14] == rpa[1] and cipher_text[13] == rpa[2]
|
||||||
|
|
||||||
|
|
||||||
|
def addr_to_bytes(addr:str) -> bytes:
|
||||||
|
"""Converts a bluetooth mac address string with semicolons to bytes"""
|
||||||
|
str_without_colons = addr.replace(":", "")
|
||||||
|
bytearr = bytearray.fromhex(str_without_colons)
|
||||||
|
bytearr.reverse()
|
||||||
|
return bytes(bytearr)
|
||||||
|
|
||||||
|
|
||||||
|
def decode_address(addr: str, irks: Dict[str, str]):
|
||||||
|
"""
|
||||||
|
addr is a bluetooth address as a string e.g. 4d:24:12:12:34:10
|
||||||
|
irks is dict with irk as a hex string, mapping to device name
|
||||||
|
"""
|
||||||
|
for irk, name in irks.items():
|
||||||
|
if resolve_rpa(addr_to_bytes(addr), bytes.fromhex(irk)):
|
||||||
|
return name
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def estimate_distance(rssi, tx_power, pl0=54):
|
||||||
|
"""
|
||||||
|
RSSI in dBm
|
||||||
|
txPower is a transmitter parameter that calculated according to its physic layer and antenna in dBm
|
||||||
|
Return value in meter
|
||||||
|
|
||||||
|
You should calculate "PL0" in calibration stage:
|
||||||
|
PL0 = txPower - RSSI; // When distance is distance0 (distance0 = 1m or more)
|
||||||
|
|
||||||
|
SO, RSSI will be calculated by below formula:
|
||||||
|
RSSI = txPower - PL0 - 10 * n * log(distance/distance0) - G(t)
|
||||||
|
G(t) ~= 0 //This parameter is the main challenge in achiving to more accuracy.
|
||||||
|
n = 2 (Path Loss Exponent, in the free space is 2)
|
||||||
|
distance0 = 1 (m)
|
||||||
|
distance = 10 ^ ((txPower - RSSI - PL0 ) / (10 * n))
|
||||||
|
|
||||||
|
Read more details:
|
||||||
|
https://en.wikipedia.org/wiki/Log-distance_path_loss_model
|
||||||
|
"""
|
||||||
|
n = 2.7
|
||||||
|
return 10**(( tx_power - rssi - pl0) / (10 * n))
|
||||||
|
|
||||||
|
|
||||||
|
def callback(device, advertising_data):
|
||||||
|
print(device.address)
|
||||||
|
decoded = decode_address(device.address, irks)
|
||||||
|
if decoded:
|
||||||
|
print(f"{decoded} @ {advertising_data.rssi} distance {estimate_distance(advertising_data.rssi, advertising_data.tx_power)}")
|
||||||
|
|
||||||
|
|
||||||
|
async def main():
|
||||||
|
# Scan for
|
||||||
|
args = BlueZScannerArgs(
|
||||||
|
or_patterns=[OrPattern(0, AdvertisementDataType.MANUFACTURER_SPECIFIC_DATA, b"\x10\x05")]
|
||||||
|
)
|
||||||
|
stop_event = asyncio.Event()
|
||||||
|
|
||||||
|
#async with BleakScanner(bluez=args, scanning_mode="passive") as scanner:
|
||||||
|
async with BleakScanner(callback) as scanner:
|
||||||
|
await stop_event.wait()
|
||||||
|
|
||||||
|
asyncio.run(main())
|
|
@ -0,0 +1,10 @@
|
||||||
|
import asyncio
|
||||||
|
from bleak import BleakScanner
|
||||||
|
|
||||||
|
async def main():
|
||||||
|
devices = await BleakScanner.discover()
|
||||||
|
while True:
|
||||||
|
for d in devices:
|
||||||
|
print(d)
|
||||||
|
|
||||||
|
asyncio.run(main())
|
|
@ -0,0 +1,58 @@
|
||||||
|
"""Scan for iBeacons.
|
||||||
|
Copyright (c) 2022 Koen Vervloesem
|
||||||
|
SPDX-License-Identifier: MIT
|
||||||
|
"""
|
||||||
|
import asyncio
|
||||||
|
from uuid import UUID
|
||||||
|
|
||||||
|
from construct import Array, Byte, Const, Int8sl, Int16ub, Struct
|
||||||
|
from construct.core import ConstError
|
||||||
|
|
||||||
|
from bleak import BleakScanner
|
||||||
|
from bleak.backends.device import BLEDevice
|
||||||
|
from bleak.backends.scanner import AdvertisementData
|
||||||
|
|
||||||
|
ibeacon_format = Struct(
|
||||||
|
"type_length" / Const(b"\x02\x15"),
|
||||||
|
"uuid" / Array(16, Byte),
|
||||||
|
"major" / Int16ub,
|
||||||
|
"minor" / Int16ub,
|
||||||
|
"power" / Int8sl,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def device_found(
|
||||||
|
device: BLEDevice, advertisement_data: AdvertisementData
|
||||||
|
):
|
||||||
|
"""Decode iBeacon."""
|
||||||
|
try:
|
||||||
|
apple_data = advertisement_data.manufacturer_data[0x004C]
|
||||||
|
print("apple data", apple_data)
|
||||||
|
ibeacon = ibeacon_format.parse(apple_data)
|
||||||
|
uuid = UUID(bytes=bytes(ibeacon.uuid))
|
||||||
|
print(f"UUID : {uuid}")
|
||||||
|
print(f"Major : {ibeacon.major}")
|
||||||
|
print(f"Minor : {ibeacon.minor}")
|
||||||
|
print(f"TX power : {ibeacon.power} dBm")
|
||||||
|
print(f"RSSI : {device.rssi} dBm")
|
||||||
|
print(47 * "-")
|
||||||
|
except KeyError:
|
||||||
|
# Apple company ID (0x004c) not found
|
||||||
|
pass
|
||||||
|
except ConstError:
|
||||||
|
# No iBeacon (type 0x02 and length 0x15)
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
async def main():
|
||||||
|
"""Scan for devices."""
|
||||||
|
scanner = BleakScanner()
|
||||||
|
scanner.register_detection_callback(device_found)
|
||||||
|
|
||||||
|
while True:
|
||||||
|
await scanner.start()
|
||||||
|
await asyncio.sleep(1.0)
|
||||||
|
await scanner.stop()
|
||||||
|
|
||||||
|
|
||||||
|
asyncio.run(main())
|
|
@ -0,0 +1,3 @@
|
||||||
|
devices:
|
||||||
|
martins_iphone: 840e3892644c1ebd1594a9069c14ce0d
|
||||||
|
martins_apple_watch: aa67542b82c0e05d65c27fb7e313aba5
|
|
@ -0,0 +1,8 @@
|
||||||
|
- name: Apt install bluez and firmware
|
||||||
|
apt:
|
||||||
|
name:
|
||||||
|
- bluez
|
||||||
|
- bluez-firmware
|
||||||
|
- firmware-realtek
|
||||||
|
- firmware-realtek-rtl8723cs-bt
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
---
|
||||||
|
- name: Install packages
|
||||||
|
apt:
|
||||||
|
name:
|
||||||
|
- bat
|
||||||
|
- fish
|
||||||
|
- fzf
|
||||||
|
- fd-find
|
||||||
|
- ripgrep
|
||||||
|
- lsd
|
||||||
|
- zoxide
|
||||||
|
|
||||||
|
- name: Check if oh-my-fish is installed
|
||||||
|
stat:
|
||||||
|
path: '/etc/omf.installed'
|
||||||
|
register: omf
|
||||||
|
|
||||||
|
- name: Download omf installer
|
||||||
|
get_url:
|
||||||
|
url: https://raw.githubusercontent.com/oh-my-fish/oh-my-fish/master/bin/install
|
||||||
|
|
||||||
|
- name: Execute omf installer
|
||||||
|
shell: /usr/bin/fish /tmp/install --noninteractive
|
||||||
|
|
||||||
|
- name: Execute omf installer
|
||||||
|
shell: /usr/bin/fish -c omf install
|
||||||
|
|
||||||
|
- name: Remove the omf installer
|
||||||
|
file:
|
||||||
|
path: /tmp/install
|
||||||
|
state: absent
|
||||||
|
|
||||||
|
- name: Mark oh-my-fish installed with /etc/omf.installed
|
||||||
|
file:
|
||||||
|
path: /etc/omf.installed
|
||||||
|
state: touch
|
|
@ -1,10 +1,10 @@
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=DHT22 Temperature Humidity Sensing
|
Description=DHT22 Temperature Humidity Sensing
|
||||||
After=multi-user.target
|
After=network.target
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
Type=simple
|
Type=simple
|
||||||
ExecStart=/usr/bin/python3 /usr/bin/dht22_sensing
|
ExecStart=/usr/bin/dht22_sensing
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
|
@ -10,16 +10,18 @@
|
||||||
name: adafruit-circuitpython-dht
|
name: adafruit-circuitpython-dht
|
||||||
executable: pip3
|
executable: pip3
|
||||||
state: absent
|
state: absent
|
||||||
|
extra_args: "--break-system-packages"
|
||||||
- name: pip install adafruit-dht
|
- name: pip install adafruit-dht
|
||||||
pip:
|
pip:
|
||||||
name: adafruit-dht
|
name: adafruit-dht
|
||||||
executable: pip3
|
executable: pip3
|
||||||
|
extra_args: "--break-system-packages"
|
||||||
- name: Install script config
|
- name: Install script config
|
||||||
template: src=dht22_sensing.json dest=/etc/dht22_sensing.json
|
template: src=dht22_sensing.json dest=/etc/dht22_sensing.json
|
||||||
- name: Install script
|
- name: Install script
|
||||||
copy: src=dht22_sensing.py dest=/usr/bin/dht22_sensing owner=root mode=u+rwx
|
copy: src=dht22_sensing.py dest=/usr/bin/dht22_sensing owner=root mode=u+rwx
|
||||||
- name: Install systemd service file
|
- name: Install systemd service file
|
||||||
copy: src=dht22_sensing.service dest=/lib/systemd/system/
|
copy: src=dht22_sensing.service dest=/etc/systemd/system/
|
||||||
- name: Add script to autostart and start now
|
- name: Add script to autostart and start now
|
||||||
systemd: name=dht22_sensing state=restarted enabled=yes daemon_reload=yes
|
systemd: name=dht22_sensing state=restarted enabled=yes daemon_reload=yes
|
||||||
- name: Add to sysdweb
|
- name: Add to sysdweb
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
notify: reboot
|
notify: reboot
|
||||||
- name: Activate Hifiberry
|
- name: Activate Hifiberry
|
||||||
lineinfile:
|
lineinfile:
|
||||||
path: /boot/config.txt
|
path: /boot/firmware/config.txt
|
||||||
regexp: "^#?dtoverlay=hifiberry-amp"
|
regexp: "^#?dtoverlay=hifiberry-amp"
|
||||||
line: "dtoverlay={{hifiberry_overlay}}"
|
line: "dtoverlay={{hifiberry_overlay}}"
|
||||||
notify: reboot
|
notify: reboot
|
||||||
|
|
|
@ -1,43 +1,16 @@
|
||||||
---
|
---
|
||||||
# Lirc needs a custom build on Raspian Buster, more details here:
|
- name: Install lirc
|
||||||
# https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=235256
|
apt:
|
||||||
# https://gist.github.com/billpatrianakos/cb72e984d4730043fe79cbe5fc8f7941
|
name: lirc
|
||||||
- name: Create lirc config dir
|
|
||||||
file: path=/etc/lirc state=directory
|
|
||||||
- name: Install config file lirc_options.conf
|
- name: Install config file lirc_options.conf
|
||||||
copy: src=lirc_options.conf dest=/etc/lirc/lirc_options.conf
|
copy: src=lirc_options.conf dest=/etc/lirc/lirc_options.conf
|
||||||
- name: Install config file lircd.conf
|
- name: Install config file lircd.conf
|
||||||
copy: src=lircd.conf dest=/etc/lirc/lircd.conf
|
copy: src=lircd.conf dest=/etc/lirc/lircd.conf
|
||||||
- name: Install remote file
|
- name: Install remote file
|
||||||
copy: src=hauppauge.conf dest=/etc/lirc/hauppauge.conf
|
copy: src=hauppauge.conf dest=/etc/lirc/hauppauge.conf
|
||||||
- name: create temporary directory
|
|
||||||
tempfile:
|
|
||||||
state: directory
|
|
||||||
suffix: temp
|
|
||||||
register: tempdir
|
|
||||||
- name: Copy over lirc customly compiled lirc packages
|
|
||||||
copy:
|
|
||||||
src: debs/
|
|
||||||
dest: "{{ tempdir.path }}"
|
|
||||||
when: tempdir.path is defined
|
|
||||||
- name: Install custom lirc package 1
|
|
||||||
apt:
|
|
||||||
force: True
|
|
||||||
deb: "{{ tempdir.path }}/liblirc0_0.10.1-5.2_armhf.deb"
|
|
||||||
when: tempdir.path is defined
|
|
||||||
- name: Install custom lirc package 2
|
|
||||||
apt:
|
|
||||||
force: True
|
|
||||||
deb: "{{ tempdir.path }}/liblircclient0_0.10.1-5.2_armhf.deb"
|
|
||||||
when: tempdir.path is defined
|
|
||||||
- name: Install custom lirc package 3
|
|
||||||
apt:
|
|
||||||
force: True
|
|
||||||
deb: "{{ tempdir.path }}/lirc_0.10.1-5.2_armhf.deb"
|
|
||||||
when: tempdir.path is defined
|
|
||||||
- name: Activate overlay in boot config
|
- name: Activate overlay in boot config
|
||||||
lineinfile:
|
lineinfile:
|
||||||
path: /boot/config.txt
|
path: /boot/firmware/config.txt
|
||||||
regexp: "^#?dtoverlay=gpio-ir"
|
regexp: "^#?dtoverlay=gpio-ir"
|
||||||
line: "dtoverlay=gpio-ir,gpio_pin=17"
|
line: "dtoverlay=gpio-ir,gpio_pin=17"
|
||||||
register: boot_overlay
|
register: boot_overlay
|
||||||
|
|
|
@ -1,3 +1,25 @@
|
||||||
|
|
||||||
|
Repository: https://github.com/ralph-irving/squeezelite.git
|
||||||
|
Version: c89faf3280c5dca3f04906a4ff7796a0043e99f0
|
||||||
|
|
||||||
|
|
||||||
|
Packages to build:
|
||||||
|
- libmad0
|
||||||
|
- libmpg123-0
|
||||||
|
- libflac8
|
||||||
|
- libvorbisfile3
|
||||||
|
- libfaad2
|
||||||
|
# for building libssl-dev, libasound2-dev, libflac-dev, libvorbis-dev, libsoxr-dev, libfaad-dev, libmad0-dev, libmpg123-dev
|
||||||
|
|
||||||
|
Adapted makefile.rpi
|
||||||
|
#OPTS = -DRESAMPLE -DDSD -DUSE_SSL -DLINKALL -I./include -I./include/opus -I./include/alac -I/usr/local/include -s -mfpu=vfp -mfloat-abi=hard -march=armv6zk -mtune=arm1176jzf-s
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Old
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
Repository: https://github.com/ralph-irving/squeezelite.git
|
Repository: https://github.com/ralph-irving/squeezelite.git
|
||||||
Version: 779fe9035a2dfcaeeb5335497a012d5e7241a409
|
Version: 779fe9035a2dfcaeeb5335497a012d5e7241a409
|
||||||
|
|
||||||
|
@ -22,3 +44,4 @@ apt-get install libasound2 libasound2-dev libflac-dev libmad0-dev libfaad-dev li
|
||||||
|
|
||||||
Then just build with
|
Then just build with
|
||||||
make -f mymakefile (on a raspi)
|
make -f mymakefile (on a raspi)
|
||||||
|
|
||||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -6,9 +6,10 @@
|
||||||
name:
|
name:
|
||||||
- libmad0
|
- libmad0
|
||||||
- libmpg123-0
|
- libmpg123-0
|
||||||
- libflac8
|
- libflac12
|
||||||
- libvorbisfile3
|
- libvorbisfile3
|
||||||
- libfaad2
|
- libfaad2
|
||||||
|
# for building libssl-dev, libasound2-dev, libflac-dev, libvorbis-dev, libsoxr-dev, libfaad-dev, libmad0-dev, libmpg123-dev
|
||||||
state: present
|
state: present
|
||||||
cache_valid_time: 7200
|
cache_valid_time: 7200
|
||||||
- name: Remove old config file if present
|
- name: Remove old config file if present
|
||||||
|
@ -24,3 +25,7 @@
|
||||||
name: pi-sysdweb
|
name: pi-sysdweb
|
||||||
vars:
|
vars:
|
||||||
sysdweb_name: squeezelite
|
sysdweb_name: squeezelite
|
||||||
|
|
||||||
|
|
||||||
|
# build with adapted Makefile.rpi:
|
||||||
|
#OPTS = -DRESAMPLE -DDSD -DUSE_SSL -DLINKALL -I./include -I./include/opus -I./include/alac -I/usr/local/include -s -mfpu=vfp -mfloat-abi=hard -march=armv6zk -mtune=arm1176jzf-s
|
Binary file not shown.
|
@ -1 +1,2 @@
|
||||||
http://downloads.slimdevices.com/LogitechMediaServer_v7.9.2/logitechmediaserver_7.9.2_arm.deb
|
#http://downloads.slimdevices.com/LogitechMediaServer_v7.9.2/logitechmediaserver_7.9.2_arm.deb
|
||||||
|
https://downloads.slimdevices.com/LogitechMediaServer_v8.4.0/logitechmediaserver_8.4.0_arm.deb
|
|
@ -15,9 +15,9 @@
|
||||||
cache_valid_time: 7200
|
cache_valid_time: 7200
|
||||||
state: present
|
state: present
|
||||||
- name: copy squeezeserver package
|
- name: copy squeezeserver package
|
||||||
copy: src=logitechmediaserver_7.9.2_arm.deb dest=/tmp
|
copy: src=logitechmediaserver_8.4.0_arm.deb dest=/tmp
|
||||||
- name: install squeezeserver package
|
- name: install squeezeserver package
|
||||||
apt: deb=/tmp/logitechmediaserver_7.9.2_arm.deb
|
apt: deb=/tmp/logitechmediaserver_8.4.0_arm.deb
|
||||||
- name: Enable sysdweb autostart
|
- name: Enable sysdweb autostart
|
||||||
systemd: name=logitechmediaserver state=started enabled=yes
|
systemd: name=logitechmediaserver state=started enabled=yes
|
||||||
- name: Add to sysdweb
|
- name: Add to sysdweb
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
pip:
|
pip:
|
||||||
name: sysdweb
|
name: sysdweb
|
||||||
executable: pip3
|
executable: pip3
|
||||||
|
extra_args: "--break-system-packages"
|
||||||
- name: sysdweb user
|
- name: sysdweb user
|
||||||
user:
|
user:
|
||||||
name: sysdweb
|
name: sysdweb
|
||||||
|
@ -33,6 +34,6 @@
|
||||||
title = {{sysdweb_name}}
|
title = {{sysdweb_name}}
|
||||||
unit = {{sysdweb_name}}.service
|
unit = {{sysdweb_name}}.service
|
||||||
- name: Install systemd service file
|
- name: Install systemd service file
|
||||||
copy: src=sysdweb-system.service dest=/lib/systemd/system/
|
copy: src=sysdweb-system.service dest=/etc/systemd/system/
|
||||||
- name: Enable sysdweb autostart
|
- name: Enable sysdweb autostart
|
||||||
systemd: name=sysdweb-system state=restarted enabled=yes daemon_reload=yes
|
systemd: name=sysdweb-system state=restarted enabled=yes daemon_reload=yes
|
||||||
|
|
|
@ -3,8 +3,9 @@
|
||||||
set -e # exit on error
|
set -e # exit on error
|
||||||
|
|
||||||
TARGET_FOLDER="./rpi_image"
|
TARGET_FOLDER="./rpi_image"
|
||||||
IMG_FILE_BASENAME="2021-10-30-raspios-bullseye-armhf-lite"
|
IMG_FILE_BASENAME="2023-12-11-raspios-bookworm-armhf-lite"
|
||||||
DOWNLOAD_URL="https://downloads.raspberrypi.org/raspios_lite_armhf/images/raspios_lite_armhf-2021-11-08/${IMG_FILE_BASENAME}.zip"
|
#DOWNLOAD_URL="https://downloads.raspberrypi.org/raspios_lite_armhf/images/raspios_lite_armhf-2021-11-08/${IMG_FILE_BASENAME}.zip"
|
||||||
|
DOWNLOAD_URL="https://downloads.raspberrypi.com/raspios_lite_armhf/images/raspios_lite_armhf-2023-12-11/${IMG_FILE_BASENAME}.img.xz"
|
||||||
|
|
||||||
echo "This script downloads raspian lite, and modifies the image to enable SSH and set hostname"
|
echo "This script downloads raspian lite, and modifies the image to enable SSH and set hostname"
|
||||||
|
|
||||||
|
@ -28,11 +29,10 @@ wget ${DOWNLOAD_URL}
|
||||||
wget ${DOWNLOAD_URL}.sha256
|
wget ${DOWNLOAD_URL}.sha256
|
||||||
|
|
||||||
echo "Checksum verification"
|
echo "Checksum verification"
|
||||||
sha256sum -c ${IMG_FILE_BASENAME}.zip.sha256
|
sha256sum -c ${IMG_FILE_BASENAME}.img.xz.sha256
|
||||||
|
|
||||||
echo "Unpack image"
|
echo "Unpack image"
|
||||||
unzip ${IMG_FILE_BASENAME}.zip
|
unxz ${IMG_FILE_BASENAME}.img.xz
|
||||||
rm ${IMG_FILE_BASENAME}.zip
|
|
||||||
|
|
||||||
|
|
||||||
echo "Mounting image"
|
echo "Mounting image"
|
||||||
|
@ -81,7 +81,7 @@ losetup -d /dev/loop42
|
||||||
rmdir mounted_image/boot
|
rmdir mounted_image/boot
|
||||||
rmdir mounted_image/system
|
rmdir mounted_image/system
|
||||||
rmdir mounted_image
|
rmdir mounted_image
|
||||||
rm ${IMG_FILE_BASENAME}.zip.sha256
|
rm ${IMG_FILE_BASENAME}.img.xz.sha256
|
||||||
chmod a+rw ${IMG_FILE_BASENAME}.img .
|
chmod a+rw ${IMG_FILE_BASENAME}.img .
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
|
|
Loading…
Reference in New Issue