thermferm/devices.c

changeset 649
64cfc01ec024
parent 648
62c5ed1b9cfd
child 650
0b215e4b814e
equal deleted inserted replaced
648:62c5ed1b9cfd 649:64cfc01ec024
75 fd = open(dhtpath, O_RDONLY); 75 fd = open(dhtpath, O_RDONLY);
76 if (fd < 0) { 76 if (fd < 0) {
77 /* 77 /*
78 * The sensor is gone. 78 * The sensor is gone.
79 */ 79 */
80 err = errno;
81 syslog(LOG_NOTICE, "DHT11 open temperature: %d %s", err, strerror(err));
80 free(dhtpath); 82 free(dhtpath);
81 dht11_state = DEVPRESENT_NO; 83 dht11_state = DEVPRESENT_NO;
82 break; 84 goto retry;
85 // break;
83 } 86 }
84 rc = read(fd, buffer, 25); 87 rc = read(fd, buffer, 25);
85 if (rc == -1) { 88 if (rc == -1) {
86 err = errno; 89 err = errno;
87 if (err == 110) { 90 if (err == 110) {
92 } 95 }
93 syslog(LOG_NOTICE, "DHT11 read temperature: %d %s", err, strerror(err)); 96 syslog(LOG_NOTICE, "DHT11 read temperature: %d %s", err, strerror(err));
94 dht11_temperature = -1; 97 dht11_temperature = -1;
95 } else { 98 } else {
96 sscanf(buffer, "%d", &temp); 99 sscanf(buffer, "%d", &temp);
97 syslog(LOG_NOTICE, "read temp rc=%d %f", rc, temp / 1000.0);
98 dht11_temperature = temp; 100 dht11_temperature = temp;
99 dht11_state = DEVPRESENT_YES; 101 dht11_state = DEVPRESENT_YES;
100 } 102 }
101 close(fd); 103 close(fd);
102 free(dhtpath); 104 free(dhtpath);
122 } 124 }
123 syslog(LOG_NOTICE, "DHT11 read temperature: %d %s", err, strerror(err)); 125 syslog(LOG_NOTICE, "DHT11 read temperature: %d %s", err, strerror(err));
124 dht11_humidity = -1; 126 dht11_humidity = -1;
125 } else { 127 } else {
126 sscanf(buffer, "%d", &hum); 128 sscanf(buffer, "%d", &hum);
127 syslog(LOG_NOTICE, "read hum rc=%d %f", rc, hum / 1000.0);
128 dht11_humidity = hum; 129 dht11_humidity = hum;
129 dht11_state = DEVPRESENT_YES; 130 dht11_state = DEVPRESENT_YES;
130 } 131 }
131 close(fd); 132 close(fd);
132 free(dhtpath); 133 free(dhtpath);
134 } 135 }
135 136
136 if (dht11_state == DEVPRESENT_YES) { 137 if (dht11_state == DEVPRESENT_YES) {
137 break; 138 break;
138 } 139 }
139 if (tries > 0) 140 retry:
141 if (tries > 0) {
140 tries--; 142 tries--;
143 usleep(400000);
144 }
141 } 145 }
142 146
143 syslog(LOG_NOTICE, "dht11 t:%d h:%d tries:%d state:%d", dht11_temperature, dht11_humidity, 6-tries, dht11_state); 147 syslog(LOG_NOTICE, "dht11 t:%d h:%d tries:%d state:%d", dht11_temperature, dht11_humidity, 6-tries, dht11_state);
144 } 148 }
145 149

mercurial