Jelikož mi přestalo 1-wire přímo na GPIO spolehlivě fungovat rozhodle jsem se zkusit I2C kontrolér DS2482-100.
Vycházel jsem z návodu zde.
Zapojení je podle tohoto návodu, zkusil jsem to nejjednodušší bez MOSFET tranzistoru. Zapojení s MOSFET je níže v sekci „další zdroje“.
Hardware a zapojení
Nakoupil jsem si 5 ks DS2482-100, desky … TODO
Software
Nejprve jsem naistaloval I2C tools
sudo apt-get install i2c-tools
I2C kontrolér mám připojen na I2C bus 1 (SDA1, SCL1 piny 3 a 5 resp. GPIO 2,3).
Spustím tedy command pro detekci kontroléru. 18 níže znamená že zdetekovalo.
i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- 18 -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
Konfigurace owfs
owfs mám již z minulosti zprovozněno a teploty se mi zobrazují v homeassistantu – více zde.
Bylo potřeba jen přidat zdroj. Někde místo „i2c = …“ uvádí „device = …“ ale mně takto funguje OK.
Slovo „server: “ na začátku asi není nutné (respektive možná s tím nebude fungovat pokud používáte služby owfs / owftpd nebo owhttpd, já používám jen owserver a teploty si z něj sosá homeassistant).
Přímé připojení GPIO a I2C bus najednou fungují, takže toto není třeba komentovat – finálně tedy tato sekce konfiguráku vypadá takto:
# w1 bus directly on GPIO (GPIO4 default) server: w1 = all # I2C device: DS2482-100 (on RPi3B+ pin 3,5 - BCM 2,3 SDA1,SCL1) server: i2c = /dev/i2c-1:ALL
Poté jsem restartoval služby owserveru a zkontroloval že nastartují.
sudo systemctl stop owserver.socket sudo systemctl stop owserver.service sudo systemctl start owserver.socket sudo systemctl status ow* ● owserver.socket - Listening socket for owserver Loaded: loaded (/lib/systemd/system/owserver.socket; enabled; preset: enabled) Active: active (running) since Tue 2024-12-03 22:55:20 CET; 13min ago Triggers: ● owserver.service Docs: man:owserver(1) Listen: [::]:4304 (Stream) Tasks: 0 (limit: 1568) CPU: 1ms CGroup: /system.slice/owserver.socket Dec 03 22:55:20 mccoy systemd[1]: Listening on owserver.socket - Listening socket for owserver. ● owserver.service - Backend server for 1-wire control Loaded: loaded (/lib/systemd/system/owserver.service; enabled; preset: enabled) Active: active (running) since Tue 2024-12-03 22:55:53 CET; 12min ago TriggeredBy: ● owserver.socket Docs: man:owserver(1) Main PID: 28125 (owserver) Tasks: 4 (limit: 1568) CPU: 712ms CGroup: /system.slice/owserver.service └─28125 /usr/bin/owserver --foreground -c /etc/owfs.conf Dec 03 22:55:45 mccoy systemd[1]: Starting owserver.service - Backend server for 1-wire control... Dec 03 22:55:45 mccoy owserver[28125]: DEFAULT: ow_opt.c:(780) systemd mode -- ignore foreground request Dec 03 22:55:45 mccoy owserver[28125]: DEFAULT: ow_opt.c:(670) systemd mode -- ignore 'p' option Dec 03 22:55:53 mccoy systemd[1]: Started owserver.service - Backend server for 1-wire control.
Home assistant
V home assistantu je potřeba reload integrace 1-wire.
Settings -> Devices and services -> 1 Wire -> u serveru tři tečky a „reload“
Další zdroje
Novější návod v angličtině zde a něco na fóru zde.
Hotové řešení i se schématem, které používá MOSFET na pinu 6 DS2482-100 je zde.
Projekt PoEpi od Ondřeje Caletky, který také obsahuje 1-wire kontroller na I2C s DS2482-100 v angličtině zde a zde.