Disconnected onewire devices still exist after echo 1 > w1_master_search
I'm working on embedded device where user connects and disconnects onewire sensors sometimes. Sensors are connected to DS2482 device, which is I2C to 1Wire converter. DS2482 is supported by Linux Kernel. There are only temperature sensors on the bus (DS18B20 family), also supported by Kernel.
I wrote shell script that is supposed to scan onewire bus and return new list of connected devices.
#!/bin/bash
file=/sys/bus/w1/devices/w1_bus_master1/w1_master_slaves
if [ -f $file ]; then
echo 1 > /sys/bus/w1/devices/w1_bus_master1/w1_master_search
cat $file
else
echo "Error: OneWire not initialized or hardware problem. File not found ($file)"
fi
Search doesn't work, disconnected devices still exist when I'm reading /sys/bus/w1/devices/w1_bus_master1/w1_master_slaves
.
I have tried to write bigger number to w1_master_search
file. If
echo 100 > /sys/bus/w1/devices/w1_bus_master1/w1_master_search
Then I have checked if file decrements:
cat /sys/bus/w1/devices/w1_bus_master1/w1_master_search
and it decrements every 10 seconds (w1_master_timeout is set to 10), but device list (w1_master_slaves) remain unchanged for a very long time. Disconnected devices disappear after 10 or more searches.
Is there a way to get connected devices instantly?
Edit:
I wrote another script that removes all devices manuall and starts new device scan, however it works unstable. After I disconnect and connect all sensors somethimes only one sensor is visible.
#!/bin/bash
# set -x
slaves_file=/sys/bus/w1/devices/w1_bus_master1/w1_master_slaves
search_file=/sys/bus/w1/devices/w1_bus_master1/w1_master_search
remove_file=/sys/bus/w1/devices/w1_bus_master1/w1_master_remove
# 1. Remove all slaves
slaves=`cat $slaves_file`;
newline='
'
for slave in $slaves
do
if [ ${#slave} == 15 ]; then
# echo "Removing $slave"
echo "$slave" > $remove_file;
fi
done
# 2. Scan
if [ -f $slaves_file ]; then
# echo "Scanning onewire..."
echo 1 > $search_file
# echo "Waiting for devices to settle up"
sleep 1
# echo "Device list:"
cat $slaves_file | grep "^28"
# echo "End of device list."
else
echo "Error: OneWire not initialized or hardware problem. File not found ($slaves_file)"
fi
# set +x
devices
add a comment |
I'm working on embedded device where user connects and disconnects onewire sensors sometimes. Sensors are connected to DS2482 device, which is I2C to 1Wire converter. DS2482 is supported by Linux Kernel. There are only temperature sensors on the bus (DS18B20 family), also supported by Kernel.
I wrote shell script that is supposed to scan onewire bus and return new list of connected devices.
#!/bin/bash
file=/sys/bus/w1/devices/w1_bus_master1/w1_master_slaves
if [ -f $file ]; then
echo 1 > /sys/bus/w1/devices/w1_bus_master1/w1_master_search
cat $file
else
echo "Error: OneWire not initialized or hardware problem. File not found ($file)"
fi
Search doesn't work, disconnected devices still exist when I'm reading /sys/bus/w1/devices/w1_bus_master1/w1_master_slaves
.
I have tried to write bigger number to w1_master_search
file. If
echo 100 > /sys/bus/w1/devices/w1_bus_master1/w1_master_search
Then I have checked if file decrements:
cat /sys/bus/w1/devices/w1_bus_master1/w1_master_search
and it decrements every 10 seconds (w1_master_timeout is set to 10), but device list (w1_master_slaves) remain unchanged for a very long time. Disconnected devices disappear after 10 or more searches.
Is there a way to get connected devices instantly?
Edit:
I wrote another script that removes all devices manuall and starts new device scan, however it works unstable. After I disconnect and connect all sensors somethimes only one sensor is visible.
#!/bin/bash
# set -x
slaves_file=/sys/bus/w1/devices/w1_bus_master1/w1_master_slaves
search_file=/sys/bus/w1/devices/w1_bus_master1/w1_master_search
remove_file=/sys/bus/w1/devices/w1_bus_master1/w1_master_remove
# 1. Remove all slaves
slaves=`cat $slaves_file`;
newline='
'
for slave in $slaves
do
if [ ${#slave} == 15 ]; then
# echo "Removing $slave"
echo "$slave" > $remove_file;
fi
done
# 2. Scan
if [ -f $slaves_file ]; then
# echo "Scanning onewire..."
echo 1 > $search_file
# echo "Waiting for devices to settle up"
sleep 1
# echo "Device list:"
cat $slaves_file | grep "^28"
# echo "End of device list."
else
echo "Error: OneWire not initialized or hardware problem. File not found ($slaves_file)"
fi
# set +x
devices
add a comment |
I'm working on embedded device where user connects and disconnects onewire sensors sometimes. Sensors are connected to DS2482 device, which is I2C to 1Wire converter. DS2482 is supported by Linux Kernel. There are only temperature sensors on the bus (DS18B20 family), also supported by Kernel.
I wrote shell script that is supposed to scan onewire bus and return new list of connected devices.
#!/bin/bash
file=/sys/bus/w1/devices/w1_bus_master1/w1_master_slaves
if [ -f $file ]; then
echo 1 > /sys/bus/w1/devices/w1_bus_master1/w1_master_search
cat $file
else
echo "Error: OneWire not initialized or hardware problem. File not found ($file)"
fi
Search doesn't work, disconnected devices still exist when I'm reading /sys/bus/w1/devices/w1_bus_master1/w1_master_slaves
.
I have tried to write bigger number to w1_master_search
file. If
echo 100 > /sys/bus/w1/devices/w1_bus_master1/w1_master_search
Then I have checked if file decrements:
cat /sys/bus/w1/devices/w1_bus_master1/w1_master_search
and it decrements every 10 seconds (w1_master_timeout is set to 10), but device list (w1_master_slaves) remain unchanged for a very long time. Disconnected devices disappear after 10 or more searches.
Is there a way to get connected devices instantly?
Edit:
I wrote another script that removes all devices manuall and starts new device scan, however it works unstable. After I disconnect and connect all sensors somethimes only one sensor is visible.
#!/bin/bash
# set -x
slaves_file=/sys/bus/w1/devices/w1_bus_master1/w1_master_slaves
search_file=/sys/bus/w1/devices/w1_bus_master1/w1_master_search
remove_file=/sys/bus/w1/devices/w1_bus_master1/w1_master_remove
# 1. Remove all slaves
slaves=`cat $slaves_file`;
newline='
'
for slave in $slaves
do
if [ ${#slave} == 15 ]; then
# echo "Removing $slave"
echo "$slave" > $remove_file;
fi
done
# 2. Scan
if [ -f $slaves_file ]; then
# echo "Scanning onewire..."
echo 1 > $search_file
# echo "Waiting for devices to settle up"
sleep 1
# echo "Device list:"
cat $slaves_file | grep "^28"
# echo "End of device list."
else
echo "Error: OneWire not initialized or hardware problem. File not found ($slaves_file)"
fi
# set +x
devices
I'm working on embedded device where user connects and disconnects onewire sensors sometimes. Sensors are connected to DS2482 device, which is I2C to 1Wire converter. DS2482 is supported by Linux Kernel. There are only temperature sensors on the bus (DS18B20 family), also supported by Kernel.
I wrote shell script that is supposed to scan onewire bus and return new list of connected devices.
#!/bin/bash
file=/sys/bus/w1/devices/w1_bus_master1/w1_master_slaves
if [ -f $file ]; then
echo 1 > /sys/bus/w1/devices/w1_bus_master1/w1_master_search
cat $file
else
echo "Error: OneWire not initialized or hardware problem. File not found ($file)"
fi
Search doesn't work, disconnected devices still exist when I'm reading /sys/bus/w1/devices/w1_bus_master1/w1_master_slaves
.
I have tried to write bigger number to w1_master_search
file. If
echo 100 > /sys/bus/w1/devices/w1_bus_master1/w1_master_search
Then I have checked if file decrements:
cat /sys/bus/w1/devices/w1_bus_master1/w1_master_search
and it decrements every 10 seconds (w1_master_timeout is set to 10), but device list (w1_master_slaves) remain unchanged for a very long time. Disconnected devices disappear after 10 or more searches.
Is there a way to get connected devices instantly?
Edit:
I wrote another script that removes all devices manuall and starts new device scan, however it works unstable. After I disconnect and connect all sensors somethimes only one sensor is visible.
#!/bin/bash
# set -x
slaves_file=/sys/bus/w1/devices/w1_bus_master1/w1_master_slaves
search_file=/sys/bus/w1/devices/w1_bus_master1/w1_master_search
remove_file=/sys/bus/w1/devices/w1_bus_master1/w1_master_remove
# 1. Remove all slaves
slaves=`cat $slaves_file`;
newline='
'
for slave in $slaves
do
if [ ${#slave} == 15 ]; then
# echo "Removing $slave"
echo "$slave" > $remove_file;
fi
done
# 2. Scan
if [ -f $slaves_file ]; then
# echo "Scanning onewire..."
echo 1 > $search_file
# echo "Waiting for devices to settle up"
sleep 1
# echo "Device list:"
cat $slaves_file | grep "^28"
# echo "End of device list."
else
echo "Error: OneWire not initialized or hardware problem. File not found ($slaves_file)"
fi
# set +x
devices
devices
edited Mar 1 at 14:19
Kamil
asked Mar 1 at 12:58
KamilKamil
190416
190416
add a comment |
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "106"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f503778%2fdisconnected-onewire-devices-still-exist-after-echo-1-w1-master-search%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Unix & Linux Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f503778%2fdisconnected-onewire-devices-still-exist-after-echo-1-w1-master-search%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown