thermferm/devices.c

Wed, 27 Mar 2024 17:19:46 +0100

author
Michiel Broek <mbroek@mbse.eu>
date
Wed, 27 Mar 2024 17:19:46 +0100
changeset 652
16d3d4b58b5b
parent 650
0b215e4b814e
child 654
e981d0185485
permissions
-rw-r--r--

Moved all delay functions into a new general file.

158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1 /*****************************************************************************
643
586d376ab629 Updates for DHT11 reading
Michiel Broek <mbroek@mbse.eu>
parents: 596
diff changeset
2 * Copyright (C) 2014..2024
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
3 *
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
4 * Michiel Broek <mbroek at mbse dot eu>
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
5 *
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
6 * This file is part of the mbsePi-apps
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
7 *
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
8 * This is free software; you can redistribute it and/or modify it
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
9 * under the terms of the GNU General Public License as published by the
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
10 * Free Software Foundation; either version 2, or (at your option) any
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
11 * later version.
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
12 *
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
13 * mbsePi-apps is distributed in the hope that it will be useful, but
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
14 * WITHOUT ANY WARRANTY; without even the implied warranty of
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
16 * General Public License for more details.
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
17 *
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
18 * You should have received a copy of the GNU General Public License
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
19 * along with thermferm; see the file COPYING. If not, write to the Free
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
20 * Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
21 *****************************************************************************/
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
22
179
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
23 #include "thermferm.h"
652
16d3d4b58b5b Moved all delay functions into a new general file.
Michiel Broek <mbroek@mbse.eu>
parents: 650
diff changeset
24 #include "delay.h"
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
25 #include "devices.h"
179
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
26 #include "rc-switch.h"
202
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
27 #include "panel.h"
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
28 #include "xutil.h"
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
29
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
30
646
e3edc783006b Running threads and locking doesn't depend on wiringPi anymore.
Michiel Broek <mbroek@mbse.eu>
parents: 645
diff changeset
31 int my_devices_state = 0;
e3edc783006b Running threads and locking doesn't depend on wiringPi anymore.
Michiel Broek <mbroek@mbse.eu>
parents: 645
diff changeset
32
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
33 extern sys_config Config;
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
34 extern int my_shutdown;
645
49eb753a958b All thread locks from wiringPi to standard pthreads.
Michiel Broek <mbroek@mbse.eu>
parents: 644
diff changeset
35 extern pthread_mutex_t mutexes[5];
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
36
362
c92651a54969 Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
Michiel Broek <mbroek@mbse.eu>
parents: 354
diff changeset
37 #ifdef USE_SIMULATOR
c92651a54969 Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
Michiel Broek <mbroek@mbse.eu>
parents: 354
diff changeset
38
c92651a54969 Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
Michiel Broek <mbroek@mbse.eu>
parents: 354
diff changeset
39 extern int SIMcooling;
c92651a54969 Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
Michiel Broek <mbroek@mbse.eu>
parents: 354
diff changeset
40 extern int SIMheating;
553
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
41 extern int SIMfan;
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
42 extern int SIMlight;
362
c92651a54969 Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
Michiel Broek <mbroek@mbse.eu>
parents: 354
diff changeset
43
c92651a54969 Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
Michiel Broek <mbroek@mbse.eu>
parents: 354
diff changeset
44 #endif
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
45
645
49eb753a958b All thread locks from wiringPi to standard pthreads.
Michiel Broek <mbroek@mbse.eu>
parents: 644
diff changeset
46
643
586d376ab629 Updates for DHT11 reading
Michiel Broek <mbroek@mbse.eu>
parents: 596
diff changeset
47 /*
586d376ab629 Updates for DHT11 reading
Michiel Broek <mbroek@mbse.eu>
parents: 596
diff changeset
48 * Since kernel version 4 there is a module, and a dtoverlay so that the
586d376ab629 Updates for DHT11 reading
Michiel Broek <mbroek@mbse.eu>
parents: 596
diff changeset
49 * temperature and humidity can simply read from the /sys filesystem.
586d376ab629 Updates for DHT11 reading
Michiel Broek <mbroek@mbse.eu>
parents: 596
diff changeset
50 */
202
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
51 int dht11_temperature = -1;
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
52 int dht11_humidity = -1;
648
62c5ed1b9cfd Better detection of the DHT11 sensors. Read DHT11 with errors detection and reapeated tries.
Michiel Broek <mbroek@mbse.eu>
parents: 647
diff changeset
53 int dht11_state = DEVPRESENT_UNDEF;
650
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
54 time_t dht11_next;
202
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
55
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
56
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
57
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
58 /*
213
2317b8d644fa Code cleanup, streamlined error messages.
Michiel Broek <mbroek@mbse.eu>
parents: 212
diff changeset
59 * DHT11 sensor read.
650
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
60 * Called at 30 seconds interval if all is well.
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
61 * If last read was an error, the interval is 2 seconds.
202
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
62 */
648
62c5ed1b9cfd Better detection of the DHT11 sensors. Read DHT11 with errors detection and reapeated tries.
Michiel Broek <mbroek@mbse.eu>
parents: 647
diff changeset
63 void dht11Read(char *address)
647
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
64 {
650
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
65 int temp, hum;
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
66 int fd, rc, err;
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
67 char buffer[25], *dhtpath = NULL;
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
68
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
69 dht11_temperature = -1;
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
70 dht11_humidity = -1;
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
71 dht11_state = DEVPRESENT_UNDEF;
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
72 dhtpath = xstrcpy((char *)"/sys/bus/iio/devices/");
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
73 dhtpath = xstrcat(dhtpath, address);
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
74 dhtpath = xstrcat(dhtpath, (char *)"/in_temp_input");
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
75
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
76 fd = open(dhtpath, O_RDONLY);
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
77 if (fd < 0) {
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
78 /*
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
79 * The sensor is gone.
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
80 */
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
81 err = errno;
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
82 syslog(LOG_NOTICE, "DHT11 open temperature: %d %s", err, strerror(err));
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
83 free(dhtpath);
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
84 dht11_state = DEVPRESENT_NO;
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
85 return;
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
86 }
202
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
87
650
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
88 rc = read(fd, buffer, 25);
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
89 if (rc == -1) {
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
90 err = errno;
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
91 if (err == 110) {
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
92 dht11_state = DEVPRESENT_NO; /* Device is gone */
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
93 } else {
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
94 dht11_state = DEVPRESENT_ERROR;
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
95 }
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
96 syslog(LOG_NOTICE, "DHT11 read temperature: %d %s", err, strerror(err));
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
97 } else {
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
98 sscanf(buffer, "%d", &temp);
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
99 dht11_temperature = temp;
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
100 dht11_state = DEVPRESENT_YES;
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
101 }
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
102 close(fd);
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
103 free(dhtpath);
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
104 dhtpath = NULL;
202
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
105
650
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
106 /*
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
107 * Only read humidity if state is DEVPRESENT_YES
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
108 */
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
109 if (dht11_state == DEVPRESENT_YES) {
648
62c5ed1b9cfd Better detection of the DHT11 sensors. Read DHT11 with errors detection and reapeated tries.
Michiel Broek <mbroek@mbse.eu>
parents: 647
diff changeset
110 dhtpath = xstrcpy((char *)"/sys/bus/iio/devices/");
62c5ed1b9cfd Better detection of the DHT11 sensors. Read DHT11 with errors detection and reapeated tries.
Michiel Broek <mbroek@mbse.eu>
parents: 647
diff changeset
111 dhtpath = xstrcat(dhtpath, address);
650
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
112 dhtpath = xstrcat(dhtpath, (char *)"/in_humidityrelative_input");
648
62c5ed1b9cfd Better detection of the DHT11 sensors. Read DHT11 with errors detection and reapeated tries.
Michiel Broek <mbroek@mbse.eu>
parents: 647
diff changeset
113
62c5ed1b9cfd Better detection of the DHT11 sensors. Read DHT11 with errors detection and reapeated tries.
Michiel Broek <mbroek@mbse.eu>
parents: 647
diff changeset
114 fd = open(dhtpath, O_RDONLY);
647
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
115 rc = read(fd, buffer, 25);
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
116 if (rc == -1) {
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
117 err = errno;
648
62c5ed1b9cfd Better detection of the DHT11 sensors. Read DHT11 with errors detection and reapeated tries.
Michiel Broek <mbroek@mbse.eu>
parents: 647
diff changeset
118 if (err == 110) {
650
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
119 dht11_state = DEVPRESENT_NO;
648
62c5ed1b9cfd Better detection of the DHT11 sensors. Read DHT11 with errors detection and reapeated tries.
Michiel Broek <mbroek@mbse.eu>
parents: 647
diff changeset
120 } else {
650
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
121 dht11_state = DEVPRESENT_ERROR;
648
62c5ed1b9cfd Better detection of the DHT11 sensors. Read DHT11 with errors detection and reapeated tries.
Michiel Broek <mbroek@mbse.eu>
parents: 647
diff changeset
122 }
650
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
123 syslog(LOG_NOTICE, "DHT11 read humidity: %d %s", err, strerror(err));
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
124 dht11_temperature = -1; /* Make invalid */
647
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
125 } else {
650
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
126 sscanf(buffer, "%d", &hum);
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
127 dht11_humidity = hum;
648
62c5ed1b9cfd Better detection of the DHT11 sensors. Read DHT11 with errors detection and reapeated tries.
Michiel Broek <mbroek@mbse.eu>
parents: 647
diff changeset
128 dht11_state = DEVPRESENT_YES;
202
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
129 }
647
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
130 close(fd);
648
62c5ed1b9cfd Better detection of the DHT11 sensors. Read DHT11 with errors detection and reapeated tries.
Michiel Broek <mbroek@mbse.eu>
parents: 647
diff changeset
131 free(dhtpath);
62c5ed1b9cfd Better detection of the DHT11 sensors. Read DHT11 with errors detection and reapeated tries.
Michiel Broek <mbroek@mbse.eu>
parents: 647
diff changeset
132 dhtpath = NULL;
647
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
133 }
202
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
134
650
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
135 syslog(LOG_NOTICE, "dht11 t:%d h:%d state:%d", dht11_temperature, dht11_humidity, dht11_state);
202
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
136 }
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
137
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
138
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
139
392
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
140 /*
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
141 * Read one byte from a 1-wire device like a DS2413
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
142 */
347
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
143 int read_w1(char *address, char *file)
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
144 {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
145 char *addr = NULL;
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
146 int fn = -1, rc = -1, retries = 5;
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
147 uint8_t val;
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
148
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
149 addr = xstrcpy((char *)"/sys/bus/w1/devices/");
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
150 addr = xstrcat(addr, address);
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
151 addr = xstrcat(addr, (char *)"/");
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
152 addr = xstrcat(addr, file);
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
153
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
154 if ((fn = open(addr, O_RDONLY)) >= 0) {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
155
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
156 if ((lseek(fn, 0L, SEEK_SET)) == 0) {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
157
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
158 while (retries--) {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
159 if ((read(fn, &val, 1)) == 1) {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
160 rc = (int)val;
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
161 goto leave;
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
162 }
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
163 }
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
164 syslog(LOG_NOTICE, "read_w1() read %s fatal: %s", addr, strerror(errno));
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
165
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
166 } else {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
167 syslog(LOG_NOTICE, "read_w1() lseek %s: %s", addr, strerror(errno));
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
168 }
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
169
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
170 } else {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
171 syslog(LOG_NOTICE, "read_w1() open %s: %s", addr, strerror(errno));
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
172 }
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
173
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
174 leave:
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
175 if (fn != -1) {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
176 if ((close(fn)) == -1) {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
177 syslog(LOG_NOTICE, "read_w1() close %s: %s", addr, strerror(errno));
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
178 }
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
179 }
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
180
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
181 free(addr);
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
182 return rc;
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
183 }
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
184
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
185
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
186
392
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
187 /*
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
188 * Write a byte to a 1-wire device like a DS2413
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
189 */
347
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
190 int write_w1(char *address, char *file, uint8_t val)
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
191 {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
192 char *addr = NULL;
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
193 int fn = -1, rc = -1, retries = 5;
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
194
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
195 addr = xstrcpy((char *)"/sys/bus/w1/devices/");
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
196 addr = xstrcat(addr, address);
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
197 addr = xstrcat(addr, (char *)"/");
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
198 addr = xstrcat(addr, file);
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
199
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
200 if ((fn = open(addr, O_WRONLY)) >= 0) {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
201
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
202 if ((lseek(fn, 0L, SEEK_SET)) == 0) {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
203
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
204 while (retries--) {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
205 if ((write(fn, &val, 1)) == 1) {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
206 rc = 0;
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
207 goto leave;
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
208 }
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
209 }
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
210 syslog(LOG_NOTICE, "write_w1() write %s fatal: %s", addr, strerror(errno));
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
211
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
212 } else {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
213 syslog(LOG_NOTICE, "write_w1() lseek %s: %s", addr, strerror(errno));
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
214 }
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
215
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
216 } else {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
217 syslog(LOG_NOTICE, "write_w1() open %s: %s", addr, strerror(errno));
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
218 }
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
219
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
220 leave:
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
221 if (fn != -1) {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
222 if ((close(fn)) == -1) {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
223 syslog(LOG_NOTICE, "write_w1() close %s: %s", addr, strerror(errno));
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
224 }
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
225 }
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
226
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
227 free(addr);
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
228 return rc;
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
229 }
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
230
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
231
179
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
232
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
233 int device_out(char *uuid, int value)
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
234 {
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
235 devices_list *device;
323
608592f74b10 Added extra lock
Michiel Broek <mbroek@mbse.eu>
parents: 268
diff changeset
236 time_t now, my_timestamp;
354
5ff387f4d6b7 Fixed compile issue on non-Pi systems
Michiel Broek <mbroek@mbse.eu>
parents: 351
diff changeset
237 int rc, my_value, test_value;
187
3c8bf18fdf42 Updated conditional defines and dependencies
Michiel Broek <mbroek@mbse.eu>
parents: 185
diff changeset
238 #ifdef HAVE_WIRINGPI_H
354
5ff387f4d6b7 Fixed compile issue on non-Pi systems
Michiel Broek <mbroek@mbse.eu>
parents: 351
diff changeset
239 int i;
187
3c8bf18fdf42 Updated conditional defines and dependencies
Michiel Broek <mbroek@mbse.eu>
parents: 185
diff changeset
240 char buf[40];
3c8bf18fdf42 Updated conditional defines and dependencies
Michiel Broek <mbroek@mbse.eu>
parents: 185
diff changeset
241 #endif
179
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
242
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
243 if (uuid == NULL)
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
244 return 0;
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
245
185
4f34271cf1e7 PID finetuning
Michiel Broek <mbroek@mbse.eu>
parents: 181
diff changeset
246 now = time(NULL);
645
49eb753a958b All thread locks from wiringPi to standard pthreads.
Michiel Broek <mbroek@mbse.eu>
parents: 644
diff changeset
247 pthread_mutex_lock(&mutexes[LOCK_DEVICES]);
337
5d3670aafd1b More global device locking
Michiel Broek <mbroek@mbse.eu>
parents: 325
diff changeset
248
179
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
249 for (device = Config.devices; device; device = device->next) {
240
6bdda35b4a13 Added thread locks for device processing
Michiel Broek <mbroek@mbse.eu>
parents: 239
diff changeset
250 if (! strcmp(uuid, device->uuid)) {
185
4f34271cf1e7 PID finetuning
Michiel Broek <mbroek@mbse.eu>
parents: 181
diff changeset
251 /*
4f34271cf1e7 PID finetuning
Michiel Broek <mbroek@mbse.eu>
parents: 181
diff changeset
252 * Execute command if different then the old value. But also
212
a76cbe676bf1 Code cleanup
Michiel Broek <mbroek@mbse.eu>
parents: 209
diff changeset
253 * every 2 minutes because commands can have temporary
a76cbe676bf1 Code cleanup
Michiel Broek <mbroek@mbse.eu>
parents: 209
diff changeset
254 * disconnects, or have radio problems.
185
4f34271cf1e7 PID finetuning
Michiel Broek <mbroek@mbse.eu>
parents: 181
diff changeset
255 */
323
608592f74b10 Added extra lock
Michiel Broek <mbroek@mbse.eu>
parents: 268
diff changeset
256 my_timestamp = device->timestamp;
608592f74b10 Added extra lock
Michiel Broek <mbroek@mbse.eu>
parents: 268
diff changeset
257 my_value = device->value;
347
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
258
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
259 if ((device->type == DEVTYPE_W1) && (device->direction == DEVDIR_OUT_BIN)) {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
260 test_value = (value == 0) ? 0 : 1;
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
261 } else {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
262 test_value = value;
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
263 }
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
264
351
d8c410c320db Fixed auto device update timer
Michiel Broek <mbroek@mbse.eu>
parents: 348
diff changeset
265 if ((test_value != my_value) || (((int)now - (int)my_timestamp) >= 120)) {
179
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
266
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
267 #ifdef HAVE_WIRINGPI_H
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
268 rc = 0;
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
269 if ((device->type == DEVTYPE_RC433) && (device->gpiopin != -1) && (device->present == DEVPRESENT_YES)) {
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
270 snprintf(buf, 39, "%s,%d", device->address, value ? 1:0);
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
271 for (i = 0; i < strlen(buf); i++)
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
272 if (buf[i] == '-')
240
6bdda35b4a13 Added thread locks for device processing
Michiel Broek <mbroek@mbse.eu>
parents: 239
diff changeset
273 buf[i] = ',';
645
49eb753a958b All thread locks from wiringPi to standard pthreads.
Michiel Broek <mbroek@mbse.eu>
parents: 644
diff changeset
274 pthread_mutex_unlock(&mutexes[LOCK_DEVICES]);
240
6bdda35b4a13 Added thread locks for device processing
Michiel Broek <mbroek@mbse.eu>
parents: 239
diff changeset
275 enableTransmit(device->gpiopin);
179
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
276 rc = toggleSwitch(buf);
240
6bdda35b4a13 Added thread locks for device processing
Michiel Broek <mbroek@mbse.eu>
parents: 239
diff changeset
277 disableTransmit();
645
49eb753a958b All thread locks from wiringPi to standard pthreads.
Michiel Broek <mbroek@mbse.eu>
parents: 644
diff changeset
278 pthread_mutex_lock(&mutexes[LOCK_DEVICES]);
179
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
279 syslog(LOG_NOTICE, "RC433 command %s rc=%d", buf, rc);
212
a76cbe676bf1 Code cleanup
Michiel Broek <mbroek@mbse.eu>
parents: 209
diff changeset
280 device->value = value;
a76cbe676bf1 Code cleanup
Michiel Broek <mbroek@mbse.eu>
parents: 209
diff changeset
281 device->timestamp = time(NULL);
645
49eb753a958b All thread locks from wiringPi to standard pthreads.
Michiel Broek <mbroek@mbse.eu>
parents: 644
diff changeset
282 pthread_mutex_unlock(&mutexes[LOCK_DEVICES]);
212
a76cbe676bf1 Code cleanup
Michiel Broek <mbroek@mbse.eu>
parents: 209
diff changeset
283 return rc;
a76cbe676bf1 Code cleanup
Michiel Broek <mbroek@mbse.eu>
parents: 209
diff changeset
284 }
179
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
285
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
286 if ((device->type == DEVTYPE_GPIO) && (device->gpiopin != -1) && (device->present == DEVPRESENT_YES)) {
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
287
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
288 }
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
289 #endif
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
290 if ((device->type == DEVTYPE_W1) && (device->direction == DEVDIR_OUT_BIN) && (device->present == DEVPRESENT_YES)) {
347
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
291 if (strncmp(device->address, (char *)"3a", 2) == 0) {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
292 /*
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
293 * DS2413. First read state so that we can preserve the state of
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
294 * the "other" PIO channel. To make things a bit more complicated
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
295 * the bits in the state register differ from the output register.
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
296 */
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
297 uint8_t state, output;
179
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
298
347
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
299 if ((rc = read_w1(device->address, (char *)"state")) >= 0) {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
300 state = (unsigned int)rc;
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
301 output = (state & 0x01) + ((state & 0x04) >> 1);
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
302
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
303 if (device->subdevice == 0) {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
304 output = (output & 0xfe);
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
305 output |= (value == 0) ? 0x01 : 0x00;
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
306 } else if (device->subdevice == 1) {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
307 output = (output & 0xfd);
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
308 output |= (value == 0) ? 0x02 : 0x00;
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
309 } else {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
310 output = 0xff;
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
311 }
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
312
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
313 if ((write_w1(device->address, (char *)"output", output)) == 0) {
348
ffc4b8aa824f Changed Fan switch logic.
Michiel Broek <mbroek@mbse.eu>
parents: 347
diff changeset
314 syslog(LOG_NOTICE, "DS2413 PIO%c value=%d (%s)", (device->subdevice == 0) ? 'A' : 'B', (value == 0) ? 0 : 1, device->comment);
347
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
315 device->value = (value == 0) ? 0 : 1;
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
316 device->timestamp = time(NULL);
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
317 }
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
318 }
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
319 }
179
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
320 }
347
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
321
259
b7c967359771 Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents: 242
diff changeset
322 #ifdef USE_SIMULATOR
b7c967359771 Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents: 242
diff changeset
323 if ((device->type == DEVTYPE_SIM) && (device->direction == DEVDIR_OUT_BIN) && (device->present == DEVPRESENT_YES)) {
553
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
324 if ((strcmp((char *)"SimCooler", device->address) == 0) || (strcmp((char *)"SimHeater", device->address) == 0) ||
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
325 (strcmp((char *)"SimFan" , device->address) == 0) || (strcmp((char *)"SimLight" , device->address) == 0)) {
362
c92651a54969 Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
Michiel Broek <mbroek@mbse.eu>
parents: 354
diff changeset
326 if (value != device->value) {
c92651a54969 Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
Michiel Broek <mbroek@mbse.eu>
parents: 354
diff changeset
327 syslog(LOG_NOTICE, "SIM %s value=%d", device->address, value);
c92651a54969 Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
Michiel Broek <mbroek@mbse.eu>
parents: 354
diff changeset
328 }
c92651a54969 Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
Michiel Broek <mbroek@mbse.eu>
parents: 354
diff changeset
329 device->value = value;
c92651a54969 Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
Michiel Broek <mbroek@mbse.eu>
parents: 354
diff changeset
330 device->timestamp = time(NULL);
c92651a54969 Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
Michiel Broek <mbroek@mbse.eu>
parents: 354
diff changeset
331 if (strcmp((char *)"SimCooler", device->address) == 0)
c92651a54969 Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
Michiel Broek <mbroek@mbse.eu>
parents: 354
diff changeset
332 SIMcooling = value;
c92651a54969 Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
Michiel Broek <mbroek@mbse.eu>
parents: 354
diff changeset
333 if (strcmp((char *)"SimHeater", device->address) == 0)
c92651a54969 Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
Michiel Broek <mbroek@mbse.eu>
parents: 354
diff changeset
334 SIMheating = value;
553
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
335 if (strcmp((char *)"SimFan", device->address) == 0)
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
336 SIMfan = value;
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
337 if (strcmp((char *)"SimLight", device->address) == 0)
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
338 SIMlight = value;
362
c92651a54969 Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
Michiel Broek <mbroek@mbse.eu>
parents: 354
diff changeset
339 }
259
b7c967359771 Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents: 242
diff changeset
340 }
b7c967359771 Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents: 242
diff changeset
341 #endif
179
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
342 } else {
645
49eb753a958b All thread locks from wiringPi to standard pthreads.
Michiel Broek <mbroek@mbse.eu>
parents: 644
diff changeset
343 pthread_mutex_unlock(&mutexes[LOCK_DEVICES]);
179
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
344 return 0;
583
9795a16de807 Attempt to better check the temperature sensors and lower the cpu load.
Michiel Broek <mbroek@mbse.eu>
parents: 573
diff changeset
345 } // if ((test_value != my_value) || (((int)now - (int)my_timestamp) >= 120))
9795a16de807 Attempt to better check the temperature sensors and lower the cpu load.
Michiel Broek <mbroek@mbse.eu>
parents: 573
diff changeset
346 } // if (! strcmp(uuid, device->uuid))
9795a16de807 Attempt to better check the temperature sensors and lower the cpu load.
Michiel Broek <mbroek@mbse.eu>
parents: 573
diff changeset
347 } // for (device = Config.devices; device; device = device->next)
185
4f34271cf1e7 PID finetuning
Michiel Broek <mbroek@mbse.eu>
parents: 181
diff changeset
348
645
49eb753a958b All thread locks from wiringPi to standard pthreads.
Michiel Broek <mbroek@mbse.eu>
parents: 644
diff changeset
349 pthread_mutex_unlock(&mutexes[LOCK_DEVICES]);
179
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
350 return 0;
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
351 }
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
352
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
353
392
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
354 /*
395
e32e83550963 Switched to new device read code. Removed the incomplete support for the DS2408 1-wire chip.
Michiel Broek <mbroek@mbse.eu>
parents: 394
diff changeset
355 * Returns DEVPRESENT_NO if failed.
e32e83550963 Switched to new device read code. Removed the incomplete support for the DS2408 1-wire chip.
Michiel Broek <mbroek@mbse.eu>
parents: 394
diff changeset
356 * Returns DEVPRESENT_YES if success, value contains new value.
392
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
357 */
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
358 int device_in(char *uuid, int *value)
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
359 {
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
360 devices_list *device;
395
e32e83550963 Switched to new device read code. Removed the incomplete support for the DS2408 1-wire chip.
Michiel Broek <mbroek@mbse.eu>
parents: 394
diff changeset
361 int tmp, present;
392
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
362
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
363 if (uuid == NULL)
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
364 return 0;
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
365
645
49eb753a958b All thread locks from wiringPi to standard pthreads.
Michiel Broek <mbroek@mbse.eu>
parents: 644
diff changeset
366 pthread_mutex_lock(&mutexes[LOCK_DEVICES]);
392
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
367
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
368 for (device = Config.devices; device; device = device->next) {
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
369 if (! strcmp(uuid, device->uuid)) {
395
e32e83550963 Switched to new device read code. Removed the incomplete support for the DS2408 1-wire chip.
Michiel Broek <mbroek@mbse.eu>
parents: 394
diff changeset
370 present = device->present;
e32e83550963 Switched to new device read code. Removed the incomplete support for the DS2408 1-wire chip.
Michiel Broek <mbroek@mbse.eu>
parents: 394
diff changeset
371 if (present == DEVPRESENT_YES) {
e32e83550963 Switched to new device read code. Removed the incomplete support for the DS2408 1-wire chip.
Michiel Broek <mbroek@mbse.eu>
parents: 394
diff changeset
372 tmp = device->value + device->offset;
e32e83550963 Switched to new device read code. Removed the incomplete support for the DS2408 1-wire chip.
Michiel Broek <mbroek@mbse.eu>
parents: 394
diff changeset
373 } else {
e32e83550963 Switched to new device read code. Removed the incomplete support for the DS2408 1-wire chip.
Michiel Broek <mbroek@mbse.eu>
parents: 394
diff changeset
374 tmp = 0;
e32e83550963 Switched to new device read code. Removed the incomplete support for the DS2408 1-wire chip.
Michiel Broek <mbroek@mbse.eu>
parents: 394
diff changeset
375 }
645
49eb753a958b All thread locks from wiringPi to standard pthreads.
Michiel Broek <mbroek@mbse.eu>
parents: 644
diff changeset
376 pthread_mutex_unlock(&mutexes[LOCK_DEVICES]);
395
e32e83550963 Switched to new device read code. Removed the incomplete support for the DS2408 1-wire chip.
Michiel Broek <mbroek@mbse.eu>
parents: 394
diff changeset
377 *value = tmp;
e32e83550963 Switched to new device read code. Removed the incomplete support for the DS2408 1-wire chip.
Michiel Broek <mbroek@mbse.eu>
parents: 394
diff changeset
378 return present;
392
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
379 }
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
380 }
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
381
645
49eb753a958b All thread locks from wiringPi to standard pthreads.
Michiel Broek <mbroek@mbse.eu>
parents: 644
diff changeset
382 pthread_mutex_unlock(&mutexes[LOCK_DEVICES]);
395
e32e83550963 Switched to new device read code. Removed the incomplete support for the DS2408 1-wire chip.
Michiel Broek <mbroek@mbse.eu>
parents: 394
diff changeset
383 return DEVPRESENT_NO;
392
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
384 }
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
385
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
386
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
387
179
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
388
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
389 /*
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
390 * Auto detect hotplugged or known to be present devices
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
391 */
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
392 int devices_detect(void)
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
393 {
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
394 struct dirent *de;
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
395 DIR *fd;
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
396 devices_list *device, *ndev;
340
5b49416eb116 Experimental idea
Michiel Broek <mbroek@mbse.eu>
parents: 338
diff changeset
397 int found, subdevices, ival, i, rc = 0;
162
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
398 char buf[40];
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
399 uuid_t uu;
162
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
400 #ifdef HAVE_WIRINGPI_H
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
401 int pin;
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
402 #endif
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
403
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
404 /*
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
405 * Scan for 1-wire devices
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
406 */
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
407 if ((fd = opendir((char *)"/sys/bus/w1/devices"))) {
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
408 while ((de = readdir(fd))) {
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
409 if (de->d_name[0] != '.') {
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
410 found = FALSE;
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
411 for (device = Config.devices; device; device = device->next) {
161
493e39bb0a08 Small fixes for device configuration
Michiel Broek <mbroek@mbse.eu>
parents: 158
diff changeset
412 if (strcmp(device->address,de->d_name) == 0) {
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
413 found = TRUE;
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
414 break;
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
415 }
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
416 }
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
417
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
418 if (found == FALSE) {
162
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
419 strncpy(buf, de->d_name, 2);
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
420 buf[2] = '\0';
340
5b49416eb116 Experimental idea
Michiel Broek <mbroek@mbse.eu>
parents: 338
diff changeset
421 sscanf(buf, "%02x", &ival);
647
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
422 subdevices = 0;
648
62c5ed1b9cfd Better detection of the DHT11 sensors. Read DHT11 with errors detection and reapeated tries.
Michiel Broek <mbroek@mbse.eu>
parents: 647
diff changeset
423
647
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
424 /*
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
425 * ival is zero when a ghost sensor is detected.
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
426 */
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
427 if (ival > 0)
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
428 subdevices = 1;
162
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
429 if (strcmp(buf, (char *)"3a") == 0)
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
430 subdevices = 2;
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
431 for (i = 0; i < subdevices; i++) {
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
432 ndev = (devices_list *)malloc(sizeof(devices_list));
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
433 ndev->next = NULL;
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
434 ndev->uuid = malloc(37);
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
435 uuid_generate(uu);
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
436 uuid_unparse(uu, ndev->uuid);
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
437 ndev->type = DEVTYPE_W1;
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
438 ndev->direction = DEVDIR_UNDEF;
162
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
439 if (strcmp(buf, (char *)"10") == 0) {
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
440 ndev->direction = DEVDIR_IN_ANALOG;
162
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
441 ndev->description = xstrcpy((char *)"DS18S20 Digital thermometer");
338
8e29d142d67d Added support for all 1-wire temperature sensors that are in the Linux kernel source.
Michiel Broek <mbroek@mbse.eu>
parents: 337
diff changeset
442 } else if (strcmp(buf, (char *)"22") == 0) {
8e29d142d67d Added support for all 1-wire temperature sensors that are in the Linux kernel source.
Michiel Broek <mbroek@mbse.eu>
parents: 337
diff changeset
443 ndev->direction = DEVDIR_IN_ANALOG;
648
62c5ed1b9cfd Better detection of the DHT11 sensors. Read DHT11 with errors detection and reapeated tries.
Michiel Broek <mbroek@mbse.eu>
parents: 647
diff changeset
444 ndev->description = xstrcpy((char *)"DS1822 Digital thermometer");
162
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
445 } else if (strcmp(buf, (char *)"28") == 0) {
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
446 ndev->direction = DEVDIR_IN_ANALOG;
162
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
447 ndev->description = xstrcpy((char *)"DS18B20 Digital thermometer");
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
448 } else if (strcmp(buf, (char *)"3a") == 0) {
648
62c5ed1b9cfd Better detection of the DHT11 sensors. Read DHT11 with errors detection and reapeated tries.
Michiel Broek <mbroek@mbse.eu>
parents: 647
diff changeset
449 ndev->direction = DEVDIR_IN_BIN;
162
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
450 ndev->description = xstrcpy((char *)"DS2413 Dual channel addressable switch");
338
8e29d142d67d Added support for all 1-wire temperature sensors that are in the Linux kernel source.
Michiel Broek <mbroek@mbse.eu>
parents: 337
diff changeset
451 } else if (strcmp(buf, (char *)"3b") == 0) {
8e29d142d67d Added support for all 1-wire temperature sensors that are in the Linux kernel source.
Michiel Broek <mbroek@mbse.eu>
parents: 337
diff changeset
452 ndev->direction = DEVDIR_IN_ANALOG;
8e29d142d67d Added support for all 1-wire temperature sensors that are in the Linux kernel source.
Michiel Broek <mbroek@mbse.eu>
parents: 337
diff changeset
453 ndev->description = xstrcpy((char *)"DS1825 Digital thermometer");
8e29d142d67d Added support for all 1-wire temperature sensors that are in the Linux kernel source.
Michiel Broek <mbroek@mbse.eu>
parents: 337
diff changeset
454 } else if (strcmp(buf, (char *)"42") == 0) {
8e29d142d67d Added support for all 1-wire temperature sensors that are in the Linux kernel source.
Michiel Broek <mbroek@mbse.eu>
parents: 337
diff changeset
455 ndev->direction = DEVDIR_IN_ANALOG;
8e29d142d67d Added support for all 1-wire temperature sensors that are in the Linux kernel source.
Michiel Broek <mbroek@mbse.eu>
parents: 337
diff changeset
456 ndev->description = xstrcpy((char *)"DS28EA00 Digital thermometer");
162
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
457 } else if (strcmp(buf, (char *)"w1") == 0) {
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
458 ndev->description = xstrcpy((char *)"Master System device");
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
459 } else {
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
460 ndev->description = xstrcpy((char *)"Unknown device family ");
162
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
461 ndev->description = xstrcat(ndev->description, buf);
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
462 }
343
ba3a2d27d59e Initialize offset to zero with new detected 1-wire devices.
Michiel Broek <mbroek@mbse.eu>
parents: 342
diff changeset
463 ndev->value = ndev->offset = ndev->inuse = 0;
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
464 ndev->present = DEVPRESENT_YES;
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
465 ndev->address = xstrcpy(de->d_name);
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
466 ndev->subdevice = i;
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
467 ndev->gpiopin = -1;
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
468 ndev->comment = xstrcpy((char *)"Auto detected device");
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
469 ndev->timestamp = time(NULL);
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
470
648
62c5ed1b9cfd Better detection of the DHT11 sensors. Read DHT11 with errors detection and reapeated tries.
Michiel Broek <mbroek@mbse.eu>
parents: 647
diff changeset
471 syslog(LOG_NOTICE, "New W1 device %s, subdevice %d, %s", ndev->address, ndev->subdevice, ndev->description);
62c5ed1b9cfd Better detection of the DHT11 sensors. Read DHT11 with errors detection and reapeated tries.
Michiel Broek <mbroek@mbse.eu>
parents: 647
diff changeset
472
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
473 if (Config.devices == NULL) {
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
474 Config.devices = ndev;
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
475 } else {
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
476 for (device = Config.devices; device; device = device->next) {
161
493e39bb0a08 Small fixes for device configuration
Michiel Broek <mbroek@mbse.eu>
parents: 158
diff changeset
477 if (device->next == NULL) {
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
478 device->next = ndev;
161
493e39bb0a08 Small fixes for device configuration
Michiel Broek <mbroek@mbse.eu>
parents: 158
diff changeset
479 break;
493e39bb0a08 Small fixes for device configuration
Michiel Broek <mbroek@mbse.eu>
parents: 158
diff changeset
480 }
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
481 }
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
482 }
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
483 rc++;
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
484 }
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
485 }
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
486 }
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
487 }
166
c31ea86fec43 Forgot some close functions so tha program ran out of file descriptors. Better loggin for writing the configuration.
Michiel Broek <mbroek@mbse.eu>
parents: 164
diff changeset
488 closedir(fd);
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
489 }
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
490
645
49eb753a958b All thread locks from wiringPi to standard pthreads.
Michiel Broek <mbroek@mbse.eu>
parents: 644
diff changeset
491 /*
648
62c5ed1b9cfd Better detection of the DHT11 sensors. Read DHT11 with errors detection and reapeated tries.
Michiel Broek <mbroek@mbse.eu>
parents: 647
diff changeset
492 * DHT11 as kernel module. The number after the @ is the hexadecimal
62c5ed1b9cfd Better detection of the DHT11 sensors. Read DHT11 with errors detection and reapeated tries.
Michiel Broek <mbroek@mbse.eu>
parents: 647
diff changeset
493 * number of the BCM gpio pin. Since we use pin 22 at connector pin 15
62c5ed1b9cfd Better detection of the DHT11 sensors. Read DHT11 with errors detection and reapeated tries.
Michiel Broek <mbroek@mbse.eu>
parents: 647
diff changeset
494 * the number is 16.
645
49eb753a958b All thread locks from wiringPi to standard pthreads.
Michiel Broek <mbroek@mbse.eu>
parents: 644
diff changeset
495 */
648
62c5ed1b9cfd Better detection of the DHT11 sensors. Read DHT11 with errors detection and reapeated tries.
Michiel Broek <mbroek@mbse.eu>
parents: 647
diff changeset
496 char *dhtaddr = NULL;
62c5ed1b9cfd Better detection of the DHT11 sensors. Read DHT11 with errors detection and reapeated tries.
Michiel Broek <mbroek@mbse.eu>
parents: 647
diff changeset
497 if ((fd = opendir((char *)"/sys/devices/platform/dht11@16"))) {
62c5ed1b9cfd Better detection of the DHT11 sensors. Read DHT11 with errors detection and reapeated tries.
Michiel Broek <mbroek@mbse.eu>
parents: 647
diff changeset
498 while ((de = readdir(fd))) {
62c5ed1b9cfd Better detection of the DHT11 sensors. Read DHT11 with errors detection and reapeated tries.
Michiel Broek <mbroek@mbse.eu>
parents: 647
diff changeset
499 if (de->d_name[0] != '.') {
62c5ed1b9cfd Better detection of the DHT11 sensors. Read DHT11 with errors detection and reapeated tries.
Michiel Broek <mbroek@mbse.eu>
parents: 647
diff changeset
500 if (strncmp(de->d_name, (char *)"iio", 3) == 0) {
62c5ed1b9cfd Better detection of the DHT11 sensors. Read DHT11 with errors detection and reapeated tries.
Michiel Broek <mbroek@mbse.eu>
parents: 647
diff changeset
501 dhtaddr = xstrcpy(de->d_name);
62c5ed1b9cfd Better detection of the DHT11 sensors. Read DHT11 with errors detection and reapeated tries.
Michiel Broek <mbroek@mbse.eu>
parents: 647
diff changeset
502 }
62c5ed1b9cfd Better detection of the DHT11 sensors. Read DHT11 with errors detection and reapeated tries.
Michiel Broek <mbroek@mbse.eu>
parents: 647
diff changeset
503 }
62c5ed1b9cfd Better detection of the DHT11 sensors. Read DHT11 with errors detection and reapeated tries.
Michiel Broek <mbroek@mbse.eu>
parents: 647
diff changeset
504 }
62c5ed1b9cfd Better detection of the DHT11 sensors. Read DHT11 with errors detection and reapeated tries.
Michiel Broek <mbroek@mbse.eu>
parents: 647
diff changeset
505 closedir(fd);
62c5ed1b9cfd Better detection of the DHT11 sensors. Read DHT11 with errors detection and reapeated tries.
Michiel Broek <mbroek@mbse.eu>
parents: 647
diff changeset
506 }
62c5ed1b9cfd Better detection of the DHT11 sensors. Read DHT11 with errors detection and reapeated tries.
Michiel Broek <mbroek@mbse.eu>
parents: 647
diff changeset
507 syslog(LOG_NOTICE, "%s", dhtaddr);
647
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
508
648
62c5ed1b9cfd Better detection of the DHT11 sensors. Read DHT11 with errors detection and reapeated tries.
Michiel Broek <mbroek@mbse.eu>
parents: 647
diff changeset
509 if (dhtaddr) {
647
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
510
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
511 found = FALSE;
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
512 for (device = Config.devices; device; device = device->next) {
648
62c5ed1b9cfd Better detection of the DHT11 sensors. Read DHT11 with errors detection and reapeated tries.
Michiel Broek <mbroek@mbse.eu>
parents: 647
diff changeset
513 if (strcmp(device->address, dhtaddr) == 0) {
647
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
514 found = TRUE;
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
515 break;
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
516 }
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
517 }
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
518
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
519 if (found == FALSE) {
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
520 for (i = 0; i < 2; i++) {
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
521 ndev = (devices_list *)malloc(sizeof(devices_list));
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
522 ndev->next = NULL;
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
523 ndev->uuid = malloc(37);
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
524 uuid_generate(uu);
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
525 uuid_unparse(uu, ndev->uuid);
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
526 ndev->type = DEVTYPE_DHT;
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
527 ndev->direction = DEVDIR_IN_ANALOG;
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
528 if (i == 0)
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
529 ndev->description = xstrcpy((char *)"DHT11 temperature sensor");
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
530 else
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
531 ndev->description = xstrcpy((char *)"DHT11 humidity sensor");
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
532 ndev->value = ndev->offset = ndev->inuse = 0;
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
533 ndev->present = DEVPRESENT_YES;
648
62c5ed1b9cfd Better detection of the DHT11 sensors. Read DHT11 with errors detection and reapeated tries.
Michiel Broek <mbroek@mbse.eu>
parents: 647
diff changeset
534 ndev->address = xstrcpy(dhtaddr);
647
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
535 ndev->subdevice = i;
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
536 ndev->gpiopin = -1;
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
537 ndev->comment = xstrcpy((char *)"Auto detected device");
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
538 ndev->timestamp = time(NULL);
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
539
648
62c5ed1b9cfd Better detection of the DHT11 sensors. Read DHT11 with errors detection and reapeated tries.
Michiel Broek <mbroek@mbse.eu>
parents: 647
diff changeset
540 syslog(LOG_NOTICE, "New DHT11 device %s, subdevice %d, %s", ndev->address, ndev->subdevice, ndev->description);
62c5ed1b9cfd Better detection of the DHT11 sensors. Read DHT11 with errors detection and reapeated tries.
Michiel Broek <mbroek@mbse.eu>
parents: 647
diff changeset
541
647
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
542 if (Config.devices == NULL) {
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
543 Config.devices = ndev;
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
544 } else {
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
545 for (device = Config.devices; device; device = device->next) {
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
546 if (device->next == NULL) {
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
547 device->next = ndev;
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
548 break;
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
549 }
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
550 }
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
551 }
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
552 rc++;
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
553 }
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
554 }
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
555 }
645
49eb753a958b All thread locks from wiringPi to standard pthreads.
Michiel Broek <mbroek@mbse.eu>
parents: 644
diff changeset
556
162
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
557 #ifdef HAVE_WIRINGPI_H
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
558 if (piBoardRev() == 2) {
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
559 /*
324
940a668e568f Update for newer boards
Michiel Broek <mbroek@mbse.eu>
parents: 323
diff changeset
560 * Support rev B and newer boards only
162
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
561 */
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
562 found = FALSE;
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
563 for (device = Config.devices; device; device = device->next) {
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
564 if (device->type == DEVTYPE_GPIO) {
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
565 found = TRUE;
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
566 break;
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
567 }
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
568 }
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
569
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
570 if (found == FALSE) {
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
571 /*
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
572 * There were no GPIO devices found.
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
573 */
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
574 subdevices = 12;
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
575 pin = 0;
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
576 for (i = 0; i < subdevices; i++) {
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
577 if (i == 8)
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
578 pin = 17;
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
579
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
580 ndev = (devices_list *)malloc(sizeof(devices_list));
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
581 ndev->next = NULL;
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
582 ndev->uuid = malloc(37);
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
583 uuid_generate(uu);
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
584 uuid_unparse(uu, ndev->uuid);
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
585 ndev->type = DEVTYPE_GPIO;
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
586 ndev->value = digitalRead(pin);
392
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
587 ndev->offset = 0;
162
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
588 ndev->present = DEVPRESENT_YES;
163
3d813570a5e3 LIST BUS now displays the new devices table. Adjusted the web screen
Michiel Broek <mbroek@mbse.eu>
parents: 162
diff changeset
589 ndev->address = xstrcpy((char *)"GPIO");
162
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
590 snprintf(buf, 39, "Raspberry GPIO %d", i);
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
591 ndev->description = xstrcpy(buf);
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
592 ndev->subdevice = i;
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
593 ndev->gpiopin = pin;
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
594 ndev->timestamp = time(NULL);
393
220f2f30bf68 Fixed initialisation of new GPIO RS433 and DHT11 devices.
Michiel Broek <mbroek@mbse.eu>
parents: 392
diff changeset
595 if (i == 0) {
220f2f30bf68 Fixed initialisation of new GPIO RS433 and DHT11 devices.
Michiel Broek <mbroek@mbse.eu>
parents: 392
diff changeset
596 ndev->direction = DEVDIR_INTERN;
220f2f30bf68 Fixed initialisation of new GPIO RS433 and DHT11 devices.
Michiel Broek <mbroek@mbse.eu>
parents: 392
diff changeset
597 ndev->inuse = 1;
394
14231379bec2 Spelling correction.
Michiel Broek <mbroek@mbse.eu>
parents: 393
diff changeset
598 ndev->comment = xstrcpy((char *)"433 Mhz transmitter");
393
220f2f30bf68 Fixed initialisation of new GPIO RS433 and DHT11 devices.
Michiel Broek <mbroek@mbse.eu>
parents: 392
diff changeset
599 } else if (i == 3) {
220f2f30bf68 Fixed initialisation of new GPIO RS433 and DHT11 devices.
Michiel Broek <mbroek@mbse.eu>
parents: 392
diff changeset
600 ndev->direction = DEVDIR_INTERN;
220f2f30bf68 Fixed initialisation of new GPIO RS433 and DHT11 devices.
Michiel Broek <mbroek@mbse.eu>
parents: 392
diff changeset
601 ndev->inuse = 1;
645
49eb753a958b All thread locks from wiringPi to standard pthreads.
Michiel Broek <mbroek@mbse.eu>
parents: 644
diff changeset
602 ndev->comment = xstrcpy((char *)"DHT11 sensor");
393
220f2f30bf68 Fixed initialisation of new GPIO RS433 and DHT11 devices.
Michiel Broek <mbroek@mbse.eu>
parents: 392
diff changeset
603 } else if (i == PANEL_LED) {
202
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
604 ndev->direction = DEVDIR_OUT_BIN;
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
605 ndev->inuse = 1;
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
606 ndev->comment = xstrcpy((char *)"Frontpanel LED");
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
607 } else if (i == PANEL_ENTER) {
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
608 ndev->direction = DEVDIR_IN_BIN;
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
609 ndev->inuse = 1;
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
610 ndev->comment = xstrcpy((char *)"Frontpanel Enter key");
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
611 } else if (i == PANEL_DOWN) {
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
612 ndev->direction = DEVDIR_IN_BIN;
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
613 ndev->inuse = 1;
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
614 ndev->comment = xstrcpy((char *)"Frontpanel Down key");
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
615 } else if (i == PANEL_UP) {
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
616 ndev->direction = DEVDIR_IN_BIN;
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
617 ndev->inuse = 1;
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
618 ndev->comment = xstrcpy((char *)"Frontpanel Up key");
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
619 } else if (i == 7) {
162
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
620 ndev->direction = DEVDIR_INTERN;
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
621 ndev->inuse = 1;
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
622 ndev->comment = xstrcpy((char *)"1-Wire bus");
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
623 } else {
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
624 ndev->direction = DEVDIR_IN_BIN;
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
625 ndev->inuse = 0;
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
626 ndev->comment = xstrcpy((char *)"Raspberry GPIO");
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
627 }
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
628 pin++;
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
629
648
62c5ed1b9cfd Better detection of the DHT11 sensors. Read DHT11 with errors detection and reapeated tries.
Michiel Broek <mbroek@mbse.eu>
parents: 647
diff changeset
630 syslog(LOG_NOTICE, "New GPIO device %s, subdevice %d, %s", ndev->address, ndev->subdevice, ndev->description);
62c5ed1b9cfd Better detection of the DHT11 sensors. Read DHT11 with errors detection and reapeated tries.
Michiel Broek <mbroek@mbse.eu>
parents: 647
diff changeset
631
162
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
632 if (Config.devices == NULL) {
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
633 Config.devices = ndev;
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
634 } else {
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
635 for (device = Config.devices; device; device = device->next) {
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
636 if (device->next == NULL) {
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
637 device->next = ndev;
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
638 break;
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
639 }
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
640 }
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
641 }
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
642 rc++;
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
643 }
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
644 }
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
645 }
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
646 #endif
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
647
259
b7c967359771 Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents: 242
diff changeset
648 #ifdef USE_SIMULATOR
553
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
649 found = 0;
259
b7c967359771 Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents: 242
diff changeset
650 for (device = Config.devices; device; device = device->next) {
b7c967359771 Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents: 242
diff changeset
651 if (device->type == DEVTYPE_SIM) {
553
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
652 found++;
259
b7c967359771 Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents: 242
diff changeset
653 }
b7c967359771 Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents: 242
diff changeset
654 }
b7c967359771 Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents: 242
diff changeset
655
553
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
656 /*
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
657 * Create simulated devices, or upgrade with new devices.
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
658 */
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
659 subdevices = 9;
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
660 for (i = found; i < subdevices; i++) {
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
661 ndev = (devices_list *)malloc(sizeof(devices_list));
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
662 ndev->next = NULL;
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
663 ndev->uuid = malloc(37);
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
664 uuid_generate(uu);
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
665 uuid_unparse(uu, ndev->uuid);
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
666 ndev->type = DEVTYPE_SIM;
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
667 ndev->value = ndev->offset = 0;
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
668 ndev->present = DEVPRESENT_YES;
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
669 ndev->subdevice = i;
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
670 ndev->gpiopin = -1;
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
671 ndev->comment = xstrcpy((char *)"Auto detected device");
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
672 ndev->timestamp = time(NULL);
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
673 ndev->inuse = 0;
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
674 switch (i) {
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
675 case 0: ndev->direction = DEVDIR_IN_ANALOG;
259
b7c967359771 Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents: 242
diff changeset
676 ndev->address = xstrcpy((char *)"SimRoomTemp");
b7c967359771 Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents: 242
diff changeset
677 ndev->description = xstrcpy((char *)"Simulated room temperature");
b7c967359771 Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents: 242
diff changeset
678 break;
553
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
679 case 1: ndev->direction = DEVDIR_IN_ANALOG;
259
b7c967359771 Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents: 242
diff changeset
680 ndev->address = xstrcpy((char *)"SimAirTemp");
b7c967359771 Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents: 242
diff changeset
681 ndev->description = xstrcpy((char *)"Simulated air temperature");
b7c967359771 Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents: 242
diff changeset
682 break;
553
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
683 case 2: ndev->direction = DEVDIR_IN_ANALOG;
259
b7c967359771 Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents: 242
diff changeset
684 ndev->address = xstrcpy((char *)"SimBeerTemp");
b7c967359771 Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents: 242
diff changeset
685 ndev->description = xstrcpy((char *)"Simulated beer temperature");
b7c967359771 Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents: 242
diff changeset
686 break;
553
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
687 case 3: ndev->direction = DEVDIR_OUT_BIN;
259
b7c967359771 Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents: 242
diff changeset
688 ndev->address = xstrcpy((char *)"SimHeater");
b7c967359771 Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents: 242
diff changeset
689 ndev->description = xstrcpy((char *)"Simulated heater");
b7c967359771 Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents: 242
diff changeset
690 break;
553
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
691 case 4: ndev->direction = DEVDIR_OUT_BIN;
259
b7c967359771 Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents: 242
diff changeset
692 ndev->address = xstrcpy((char *)"SimCooler");
b7c967359771 Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents: 242
diff changeset
693 ndev->description = xstrcpy((char *)"Simulated cooler");
b7c967359771 Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents: 242
diff changeset
694 break;
553
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
695 case 5: ndev->direction = DEVDIR_IN_ANALOG;
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
696 ndev->address = xstrcpy((char *)"SimRoomHum");
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
697 ndev->description = xstrcpy((char *)"Simulated room humidity");
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
698 break;
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
699 case 6: ndev->direction = DEVDIR_IN_ANALOG;
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
700 ndev->address = xstrcpy((char *)"SimChillerTemp");
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
701 ndev->description = xstrcpy((char *)"Simulated Chiller temperature");
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
702 break;
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
703 case 7: ndev->direction = DEVDIR_OUT_BIN;
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
704 ndev->address = xstrcpy((char *)"SimFan");
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
705 ndev->description = xstrcpy((char *)"Simulated fan");
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
706 break;
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
707 case 8: ndev->direction = DEVDIR_OUT_BIN;
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
708 ndev->address = xstrcpy((char *)"SimLight");
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
709 ndev->description = xstrcpy((char *)"Simulated light");
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
710 break;
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
711 }
259
b7c967359771 Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents: 242
diff changeset
712
648
62c5ed1b9cfd Better detection of the DHT11 sensors. Read DHT11 with errors detection and reapeated tries.
Michiel Broek <mbroek@mbse.eu>
parents: 647
diff changeset
713 syslog(LOG_NOTICE, "New Simulator device %s, subdevice %d, %s", ndev->address, ndev->subdevice, ndev->description);
62c5ed1b9cfd Better detection of the DHT11 sensors. Read DHT11 with errors detection and reapeated tries.
Michiel Broek <mbroek@mbse.eu>
parents: 647
diff changeset
714
553
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
715 if (Config.devices == NULL) {
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
716 Config.devices = ndev;
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
717 } else {
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
718 for (device = Config.devices; device; device = device->next) {
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
719 if (device->next == NULL) {
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
720 device->next = ndev;
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
721 break;
259
b7c967359771 Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents: 242
diff changeset
722 }
b7c967359771 Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents: 242
diff changeset
723 }
b7c967359771 Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents: 242
diff changeset
724 }
553
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
725 rc++;
259
b7c967359771 Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents: 242
diff changeset
726 }
b7c967359771 Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents: 242
diff changeset
727 #endif
b7c967359771 Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents: 242
diff changeset
728
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
729 return rc;
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
730 }
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
731
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
732
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
733
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
734 void *my_devices_loop(void *threadid)
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
735 {
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
736 devices_list *device;
262
d0014ccec615 Simulation of fridge cold loss to the room added for testing.
Michiel Broek <mbroek@mbse.eu>
parents: 259
diff changeset
737 #ifdef USE_SIMULATOR
d0014ccec615 Simulation of fridge cold loss to the room added for testing.
Michiel Broek <mbroek@mbse.eu>
parents: 259
diff changeset
738 simulator_list *simulator;
d0014ccec615 Simulation of fridge cold loss to the room added for testing.
Michiel Broek <mbroek@mbse.eu>
parents: 259
diff changeset
739 #endif
528
908ef02d5d22 Changed 1-wire logic a little bit
Michiel Broek <mbroek@mbse.eu>
parents: 527
diff changeset
740 char *addr = NULL, line1[60], line2[60], *p = NULL;
164
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
741 FILE *fp;
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
742 int temp, rc;
220
382938c5fce2 Make sure we don't read the DHT11 within 2 seconds.
Michiel Broek <mbroek@mbse.eu>
parents: 215
diff changeset
743 time_t now;
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
744
646
e3edc783006b Running threads and locking doesn't depend on wiringPi anymore.
Michiel Broek <mbroek@mbse.eu>
parents: 645
diff changeset
745 my_devices_state = 1;
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
746 syslog(LOG_NOTICE, "Thread my_devices_loop started");
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
747
242
d3fe84ece349 Fixed conditionals on systems without wiringPi.
Michiel Broek <mbroek@mbse.eu>
parents: 240
diff changeset
748 #ifdef HAVE_WIRINGPI_H
583
9795a16de807 Attempt to better check the temperature sensors and lower the cpu load.
Michiel Broek <mbroek@mbse.eu>
parents: 573
diff changeset
749 if ((rc = piHiPri(50)))
9795a16de807 Attempt to better check the temperature sensors and lower the cpu load.
Michiel Broek <mbroek@mbse.eu>
parents: 573
diff changeset
750 syslog(LOG_NOTICE, "my_devices_loop: piHiPri(50) rc=%d", rc);
242
d3fe84ece349 Fixed conditionals on systems without wiringPi.
Michiel Broek <mbroek@mbse.eu>
parents: 240
diff changeset
751 #endif
239
793c09ece542 Increase priority for the devices thread
Michiel Broek <mbroek@mbse.eu>
parents: 235
diff changeset
752
650
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
753 dht11_next = time(NULL);
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
754
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
755 /*
588
322a29000fd7 Added sensor precision initialize. Changed PID logging.
Michiel Broek <mbroek@mbse.eu>
parents: 587
diff changeset
756 * Set the temperature sensors to 12 bits resolution and write it in EEPROM
587
b8580eedfcc7 Experimental 12 bits resolution init
Michiel Broek <mbroek@mbse.eu>
parents: 586
diff changeset
757 */
b8580eedfcc7 Experimental 12 bits resolution init
Michiel Broek <mbroek@mbse.eu>
parents: 586
diff changeset
758 for (device = Config.devices; device; device = device->next) {
b8580eedfcc7 Experimental 12 bits resolution init
Michiel Broek <mbroek@mbse.eu>
parents: 586
diff changeset
759 if ((device->type == DEVTYPE_W1) &&
b8580eedfcc7 Experimental 12 bits resolution init
Michiel Broek <mbroek@mbse.eu>
parents: 586
diff changeset
760 ((strncmp(device->address, (char *)"10", 2) == 0) ||
b8580eedfcc7 Experimental 12 bits resolution init
Michiel Broek <mbroek@mbse.eu>
parents: 586
diff changeset
761 (strncmp(device->address, (char *)"22", 2) == 0) ||
b8580eedfcc7 Experimental 12 bits resolution init
Michiel Broek <mbroek@mbse.eu>
parents: 586
diff changeset
762 (strncmp(device->address, (char *)"28", 2) == 0) ||
b8580eedfcc7 Experimental 12 bits resolution init
Michiel Broek <mbroek@mbse.eu>
parents: 586
diff changeset
763 (strncmp(device->address, (char *)"3b", 2) == 0) ||
b8580eedfcc7 Experimental 12 bits resolution init
Michiel Broek <mbroek@mbse.eu>
parents: 586
diff changeset
764 (strncmp(device->address, (char *)"42", 2) == 0))) {
b8580eedfcc7 Experimental 12 bits resolution init
Michiel Broek <mbroek@mbse.eu>
parents: 586
diff changeset
765 addr = xstrcpy((char *)"/sys/bus/w1/devices/");
b8580eedfcc7 Experimental 12 bits resolution init
Michiel Broek <mbroek@mbse.eu>
parents: 586
diff changeset
766 addr = xstrcat(addr, device->address);
b8580eedfcc7 Experimental 12 bits resolution init
Michiel Broek <mbroek@mbse.eu>
parents: 586
diff changeset
767 addr = xstrcat(addr, (char *)"/w1_slave");
b8580eedfcc7 Experimental 12 bits resolution init
Michiel Broek <mbroek@mbse.eu>
parents: 586
diff changeset
768 if ((fp = fopen(addr, "w"))) {
588
322a29000fd7 Added sensor precision initialize. Changed PID logging.
Michiel Broek <mbroek@mbse.eu>
parents: 587
diff changeset
769 rc = fprintf(fp, "12\n0\n"); // According to the kernel documentation. Seems to work.
587
b8580eedfcc7 Experimental 12 bits resolution init
Michiel Broek <mbroek@mbse.eu>
parents: 586
diff changeset
770 fclose(fp);
588
322a29000fd7 Added sensor precision initialize. Changed PID logging.
Michiel Broek <mbroek@mbse.eu>
parents: 587
diff changeset
771 if (rc != 5) {
322a29000fd7 Added sensor precision initialize. Changed PID logging.
Michiel Broek <mbroek@mbse.eu>
parents: 587
diff changeset
772 syslog(LOG_NOTICE, "Program 12 bits resolution error rc=%d for %s", rc, addr);
587
b8580eedfcc7 Experimental 12 bits resolution init
Michiel Broek <mbroek@mbse.eu>
parents: 586
diff changeset
773 }
b8580eedfcc7 Experimental 12 bits resolution init
Michiel Broek <mbroek@mbse.eu>
parents: 586
diff changeset
774 }
b8580eedfcc7 Experimental 12 bits resolution init
Michiel Broek <mbroek@mbse.eu>
parents: 586
diff changeset
775 free(addr);
b8580eedfcc7 Experimental 12 bits resolution init
Michiel Broek <mbroek@mbse.eu>
parents: 586
diff changeset
776 addr = NULL;
b8580eedfcc7 Experimental 12 bits resolution init
Michiel Broek <mbroek@mbse.eu>
parents: 586
diff changeset
777 }
b8580eedfcc7 Experimental 12 bits resolution init
Michiel Broek <mbroek@mbse.eu>
parents: 586
diff changeset
778 }
b8580eedfcc7 Experimental 12 bits resolution init
Michiel Broek <mbroek@mbse.eu>
parents: 586
diff changeset
779
b8580eedfcc7 Experimental 12 bits resolution init
Michiel Broek <mbroek@mbse.eu>
parents: 586
diff changeset
780 /*
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
781 * Loop forever until the external shutdown variable is set.
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
782 */
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
783 for (;;) {
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
784
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
785 /*
164
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
786 * Process all devices.
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
787 */
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
788 for (device = Config.devices; device; device = device->next) {
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
789
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
790 if (my_shutdown)
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
791 break;
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
792
164
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
793 switch (device->type) {
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
794 case DEVTYPE_W1:
338
8e29d142d67d Added support for all 1-wire temperature sensors that are in the Linux kernel source.
Michiel Broek <mbroek@mbse.eu>
parents: 337
diff changeset
795 /*
8e29d142d67d Added support for all 1-wire temperature sensors that are in the Linux kernel source.
Michiel Broek <mbroek@mbse.eu>
parents: 337
diff changeset
796 * Only tested with DS18B20 but from the kernel source this
8e29d142d67d Added support for all 1-wire temperature sensors that are in the Linux kernel source.
Michiel Broek <mbroek@mbse.eu>
parents: 337
diff changeset
797 * should work with all 1-wire thermometer sensors.
8e29d142d67d Added support for all 1-wire temperature sensors that are in the Linux kernel source.
Michiel Broek <mbroek@mbse.eu>
parents: 337
diff changeset
798 */
8e29d142d67d Added support for all 1-wire temperature sensors that are in the Linux kernel source.
Michiel Broek <mbroek@mbse.eu>
parents: 337
diff changeset
799 if ((strncmp(device->address, (char *)"10", 2) == 0) ||
8e29d142d67d Added support for all 1-wire temperature sensors that are in the Linux kernel source.
Michiel Broek <mbroek@mbse.eu>
parents: 337
diff changeset
800 (strncmp(device->address, (char *)"22", 2) == 0) ||
8e29d142d67d Added support for all 1-wire temperature sensors that are in the Linux kernel source.
Michiel Broek <mbroek@mbse.eu>
parents: 337
diff changeset
801 (strncmp(device->address, (char *)"28", 2) == 0) ||
8e29d142d67d Added support for all 1-wire temperature sensors that are in the Linux kernel source.
Michiel Broek <mbroek@mbse.eu>
parents: 337
diff changeset
802 (strncmp(device->address, (char *)"3b", 2) == 0) ||
8e29d142d67d Added support for all 1-wire temperature sensors that are in the Linux kernel source.
Michiel Broek <mbroek@mbse.eu>
parents: 337
diff changeset
803 (strncmp(device->address, (char *)"42", 2) == 0)) {
164
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
804 addr = xstrcpy((char *)"/sys/bus/w1/devices/");
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
805 addr = xstrcat(addr, device->address);
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
806 addr = xstrcat(addr, (char *)"/w1_slave");
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
807 if ((fp = fopen(addr, "r"))) {
528
908ef02d5d22 Changed 1-wire logic a little bit
Michiel Broek <mbroek@mbse.eu>
parents: 527
diff changeset
808 fgets(line1, 50, fp); // Read 2 lines
908ef02d5d22 Changed 1-wire logic a little bit
Michiel Broek <mbroek@mbse.eu>
parents: 527
diff changeset
809 fgets(line2, 50, fp);
908ef02d5d22 Changed 1-wire logic a little bit
Michiel Broek <mbroek@mbse.eu>
parents: 527
diff changeset
810 fclose(fp);
164
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
811 /*
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
812 * The output looks like:
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
813 * 72 01 4b 46 7f ff 0e 10 57 : crc=57 YES
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
814 * 72 01 4b 46 7f ff 0e 10 57 t=23125
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
815 */
528
908ef02d5d22 Changed 1-wire logic a little bit
Michiel Broek <mbroek@mbse.eu>
parents: 527
diff changeset
816 line1[strlen(line1)-1] = '\0';
908ef02d5d22 Changed 1-wire logic a little bit
Michiel Broek <mbroek@mbse.eu>
parents: 527
diff changeset
817 if ((line1[36] == 'Y') && (line1[37] == 'E')) {
164
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
818 /* CRC is Ok, continue */
528
908ef02d5d22 Changed 1-wire logic a little bit
Michiel Broek <mbroek@mbse.eu>
parents: 527
diff changeset
819 if (device->present != DEVPRESENT_YES) {
908ef02d5d22 Changed 1-wire logic a little bit
Michiel Broek <mbroek@mbse.eu>
parents: 527
diff changeset
820 syslog(LOG_NOTICE, "sensor %s is Ok", device->address);
645
49eb753a958b All thread locks from wiringPi to standard pthreads.
Michiel Broek <mbroek@mbse.eu>
parents: 644
diff changeset
821 pthread_mutex_lock(&mutexes[LOCK_DEVICES]);
528
908ef02d5d22 Changed 1-wire logic a little bit
Michiel Broek <mbroek@mbse.eu>
parents: 527
diff changeset
822 device->present = DEVPRESENT_YES;
645
49eb753a958b All thread locks from wiringPi to standard pthreads.
Michiel Broek <mbroek@mbse.eu>
parents: 644
diff changeset
823 pthread_mutex_unlock(&mutexes[LOCK_DEVICES]);
528
908ef02d5d22 Changed 1-wire logic a little bit
Michiel Broek <mbroek@mbse.eu>
parents: 527
diff changeset
824 }
908ef02d5d22 Changed 1-wire logic a little bit
Michiel Broek <mbroek@mbse.eu>
parents: 527
diff changeset
825
908ef02d5d22 Changed 1-wire logic a little bit
Michiel Broek <mbroek@mbse.eu>
parents: 527
diff changeset
826 line2[strlen(line2)-1] = '\0';
908ef02d5d22 Changed 1-wire logic a little bit
Michiel Broek <mbroek@mbse.eu>
parents: 527
diff changeset
827 strtok(line2, (char *)"=");
164
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
828 p = strtok(NULL, (char *)"=");
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
829 rc = sscanf(p, "%d", &temp);
528
908ef02d5d22 Changed 1-wire logic a little bit
Michiel Broek <mbroek@mbse.eu>
parents: 527
diff changeset
830 if ((rc == 1) && (device->value != temp)) {
645
49eb753a958b All thread locks from wiringPi to standard pthreads.
Michiel Broek <mbroek@mbse.eu>
parents: 644
diff changeset
831 pthread_mutex_lock(&mutexes[LOCK_DEVICES]);
589
230a502b75ec Final device thermometer error detection.
Michiel Broek <mbroek@mbse.eu>
parents: 588
diff changeset
832 if (temp < -55000) {
230a502b75ec Final device thermometer error detection.
Michiel Broek <mbroek@mbse.eu>
parents: 588
diff changeset
833 syslog(LOG_NOTICE, "sensor %s value error '%d` '%s`", device->address, temp, line1);
586
504463dad07d Changed 1-wire DS18B20 sensor error check.
Michiel Broek <mbroek@mbse.eu>
parents: 585
diff changeset
834 device->present = DEVPRESENT_ERROR;
504463dad07d Changed 1-wire DS18B20 sensor error check.
Michiel Broek <mbroek@mbse.eu>
parents: 585
diff changeset
835 } else {
504463dad07d Changed 1-wire DS18B20 sensor error check.
Michiel Broek <mbroek@mbse.eu>
parents: 585
diff changeset
836 device->value = temp;
504463dad07d Changed 1-wire DS18B20 sensor error check.
Michiel Broek <mbroek@mbse.eu>
parents: 585
diff changeset
837 device->timestamp = time(NULL);
504463dad07d Changed 1-wire DS18B20 sensor error check.
Michiel Broek <mbroek@mbse.eu>
parents: 585
diff changeset
838 device->present = DEVPRESENT_YES;
504463dad07d Changed 1-wire DS18B20 sensor error check.
Michiel Broek <mbroek@mbse.eu>
parents: 585
diff changeset
839 }
645
49eb753a958b All thread locks from wiringPi to standard pthreads.
Michiel Broek <mbroek@mbse.eu>
parents: 644
diff changeset
840 pthread_mutex_unlock(&mutexes[LOCK_DEVICES]);
528
908ef02d5d22 Changed 1-wire logic a little bit
Michiel Broek <mbroek@mbse.eu>
parents: 527
diff changeset
841 }
164
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
842 } else {
528
908ef02d5d22 Changed 1-wire logic a little bit
Michiel Broek <mbroek@mbse.eu>
parents: 527
diff changeset
843 syslog(LOG_NOTICE, "sensor %s CRC error '%s`", device->address, line1);
645
49eb753a958b All thread locks from wiringPi to standard pthreads.
Michiel Broek <mbroek@mbse.eu>
parents: 644
diff changeset
844 pthread_mutex_lock(&mutexes[LOCK_DEVICES]);
164
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
845 device->present = DEVPRESENT_ERROR;
645
49eb753a958b All thread locks from wiringPi to standard pthreads.
Michiel Broek <mbroek@mbse.eu>
parents: 644
diff changeset
846 pthread_mutex_unlock(&mutexes[LOCK_DEVICES]);
164
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
847 }
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
848 } else {
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
849 if (device->present != DEVPRESENT_NO) {
268
dda91dfa4aa8 All syslog logging only to LOG_NOTICE
Michiel Broek <mbroek@mbse.eu>
parents: 262
diff changeset
850 syslog(LOG_NOTICE, "sensor %s is missing", device->address);
645
49eb753a958b All thread locks from wiringPi to standard pthreads.
Michiel Broek <mbroek@mbse.eu>
parents: 644
diff changeset
851 pthread_mutex_lock(&mutexes[LOCK_DEVICES]);
164
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
852 device->present = DEVPRESENT_NO;
645
49eb753a958b All thread locks from wiringPi to standard pthreads.
Michiel Broek <mbroek@mbse.eu>
parents: 644
diff changeset
853 pthread_mutex_unlock(&mutexes[LOCK_DEVICES]);
164
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
854 }
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
855 }
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
856 free(addr);
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
857 addr = NULL;
341
cfc952a68d4a Possible part of DS2408 code added.
Michiel Broek <mbroek@mbse.eu>
parents: 340
diff changeset
858 } /* if temperature sensor */
cfc952a68d4a Possible part of DS2408 code added.
Michiel Broek <mbroek@mbse.eu>
parents: 340
diff changeset
859 /*
342
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
860 * DS2413 Dual channel addressable switch
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
861 */
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
862 if (strncmp(device->address, (char *)"3a", 2) == 0) {
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
863 addr = xstrcpy((char *)"/sys/bus/w1/devices/");
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
864 addr = xstrcat(addr, device->address);
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
865 addr = xstrcat(addr, (char *)"/state");
347
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
866
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
867 if ((access(addr, R_OK)) == 0) {
342
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
868 if (device->present != DEVPRESENT_YES) {
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
869 syslog(LOG_NOTICE, "DS2413 %s is back", device->address);
645
49eb753a958b All thread locks from wiringPi to standard pthreads.
Michiel Broek <mbroek@mbse.eu>
parents: 644
diff changeset
870 pthread_mutex_lock(&mutexes[LOCK_DEVICES]);
342
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
871 device->present = DEVPRESENT_YES;
645
49eb753a958b All thread locks from wiringPi to standard pthreads.
Michiel Broek <mbroek@mbse.eu>
parents: 644
diff changeset
872 pthread_mutex_unlock(&mutexes[LOCK_DEVICES]);
342
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
873 }
408
ec507c1f1df7 Make sure that a DS2413 device used as input has the output latch turned off.
Michiel Broek <mbroek@mbse.eu>
parents: 395
diff changeset
874 /*
ec507c1f1df7 Make sure that a DS2413 device used as input has the output latch turned off.
Michiel Broek <mbroek@mbse.eu>
parents: 395
diff changeset
875 * First make sure that if this device is configured as input
ec507c1f1df7 Make sure that a DS2413 device used as input has the output latch turned off.
Michiel Broek <mbroek@mbse.eu>
parents: 395
diff changeset
876 * to drive the output high.
ec507c1f1df7 Make sure that a DS2413 device used as input has the output latch turned off.
Michiel Broek <mbroek@mbse.eu>
parents: 395
diff changeset
877 */
ec507c1f1df7 Make sure that a DS2413 device used as input has the output latch turned off.
Michiel Broek <mbroek@mbse.eu>
parents: 395
diff changeset
878 if (device->direction == DEVDIR_IN_BIN) {
ec507c1f1df7 Make sure that a DS2413 device used as input has the output latch turned off.
Michiel Broek <mbroek@mbse.eu>
parents: 395
diff changeset
879 uint8_t state, output;
ec507c1f1df7 Make sure that a DS2413 device used as input has the output latch turned off.
Michiel Broek <mbroek@mbse.eu>
parents: 395
diff changeset
880
ec507c1f1df7 Make sure that a DS2413 device used as input has the output latch turned off.
Michiel Broek <mbroek@mbse.eu>
parents: 395
diff changeset
881 if ((rc = read_w1(device->address, (char *)"state")) >= 0) {
ec507c1f1df7 Make sure that a DS2413 device used as input has the output latch turned off.
Michiel Broek <mbroek@mbse.eu>
parents: 395
diff changeset
882 state = (unsigned int)rc;
ec507c1f1df7 Make sure that a DS2413 device used as input has the output latch turned off.
Michiel Broek <mbroek@mbse.eu>
parents: 395
diff changeset
883 output = ((state & 0x02) >> 1) + ((state & 0x08) >> 2); /* Both latch states */
ec507c1f1df7 Make sure that a DS2413 device used as input has the output latch turned off.
Michiel Broek <mbroek@mbse.eu>
parents: 395
diff changeset
884 if (device->subdevice == 0) {
ec507c1f1df7 Make sure that a DS2413 device used as input has the output latch turned off.
Michiel Broek <mbroek@mbse.eu>
parents: 395
diff changeset
885 output = (output & 0xfe);
ec507c1f1df7 Make sure that a DS2413 device used as input has the output latch turned off.
Michiel Broek <mbroek@mbse.eu>
parents: 395
diff changeset
886 output |= 0x01;
ec507c1f1df7 Make sure that a DS2413 device used as input has the output latch turned off.
Michiel Broek <mbroek@mbse.eu>
parents: 395
diff changeset
887 } else if (device->subdevice == 1) {
ec507c1f1df7 Make sure that a DS2413 device used as input has the output latch turned off.
Michiel Broek <mbroek@mbse.eu>
parents: 395
diff changeset
888 output = (output & 0xfd);
ec507c1f1df7 Make sure that a DS2413 device used as input has the output latch turned off.
Michiel Broek <mbroek@mbse.eu>
parents: 395
diff changeset
889 output |= 0x02;
ec507c1f1df7 Make sure that a DS2413 device used as input has the output latch turned off.
Michiel Broek <mbroek@mbse.eu>
parents: 395
diff changeset
890 } else {
ec507c1f1df7 Make sure that a DS2413 device used as input has the output latch turned off.
Michiel Broek <mbroek@mbse.eu>
parents: 395
diff changeset
891 output = 0xff;
ec507c1f1df7 Make sure that a DS2413 device used as input has the output latch turned off.
Michiel Broek <mbroek@mbse.eu>
parents: 395
diff changeset
892 }
ec507c1f1df7 Make sure that a DS2413 device used as input has the output latch turned off.
Michiel Broek <mbroek@mbse.eu>
parents: 395
diff changeset
893 write_w1(device->address, (char *)"output", output);
ec507c1f1df7 Make sure that a DS2413 device used as input has the output latch turned off.
Michiel Broek <mbroek@mbse.eu>
parents: 395
diff changeset
894 }
ec507c1f1df7 Make sure that a DS2413 device used as input has the output latch turned off.
Michiel Broek <mbroek@mbse.eu>
parents: 395
diff changeset
895 }
347
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
896 if ((rc = read_w1(device->address, (char *)"state")) >= 0) {
645
49eb753a958b All thread locks from wiringPi to standard pthreads.
Michiel Broek <mbroek@mbse.eu>
parents: 644
diff changeset
897 pthread_mutex_lock(&mutexes[LOCK_DEVICES]);
342
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
898 /*
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
899 * Read PIOA or PIOB pin state bits
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
900 */
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
901 if (device->subdevice == 0)
347
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
902 device->value = (rc & 0x01) ? 0 : 1;
342
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
903 else if (device->subdevice == 1)
347
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
904 device->value = (rc & 0x04) ? 0 : 1;
342
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
905 device->timestamp = time(NULL);
645
49eb753a958b All thread locks from wiringPi to standard pthreads.
Michiel Broek <mbroek@mbse.eu>
parents: 644
diff changeset
906 pthread_mutex_unlock(&mutexes[LOCK_DEVICES]);
342
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
907 }
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
908 } else {
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
909 if (device->present != DEVPRESENT_NO) {
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
910 syslog(LOG_NOTICE, "DS2413 %s is missing", device->address);
645
49eb753a958b All thread locks from wiringPi to standard pthreads.
Michiel Broek <mbroek@mbse.eu>
parents: 644
diff changeset
911 pthread_mutex_lock(&mutexes[LOCK_DEVICES]);
342
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
912 device->present = DEVPRESENT_NO;
645
49eb753a958b All thread locks from wiringPi to standard pthreads.
Michiel Broek <mbroek@mbse.eu>
parents: 644
diff changeset
913 pthread_mutex_unlock(&mutexes[LOCK_DEVICES]);
342
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
914 }
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
915 }
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
916 free(addr);
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
917 addr = NULL;
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
918 }
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
919
164
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
920 break;
203
47e5109c7f53 Added DHT11 sensor code
Michiel Broek <mbroek@mbse.eu>
parents: 202
diff changeset
921
202
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
922 case DEVTYPE_DHT:
220
382938c5fce2 Make sure we don't read the DHT11 within 2 seconds.
Michiel Broek <mbroek@mbse.eu>
parents: 215
diff changeset
923 /*
648
62c5ed1b9cfd Better detection of the DHT11 sensors. Read DHT11 with errors detection and reapeated tries.
Michiel Broek <mbroek@mbse.eu>
parents: 647
diff changeset
924 * Don't read these to often, 2 seconds minimum delay.
650
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
925 * Delay 30 seconds if last update was successfull,
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
926 * else delay 2 seconds.
220
382938c5fce2 Make sure we don't read the DHT11 within 2 seconds.
Michiel Broek <mbroek@mbse.eu>
parents: 215
diff changeset
927 */
382938c5fce2 Make sure we don't read the DHT11 within 2 seconds.
Michiel Broek <mbroek@mbse.eu>
parents: 215
diff changeset
928 now = time(NULL);
650
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
929 if ((int)(now >= dht11_next)) {
586
504463dad07d Changed 1-wire DS18B20 sensor error check.
Michiel Broek <mbroek@mbse.eu>
parents: 585
diff changeset
930 if (device->subdevice == 0) {
643
586d376ab629 Updates for DHT11 reading
Michiel Broek <mbroek@mbse.eu>
parents: 596
diff changeset
931 /* Read once during subdevice 0 */
648
62c5ed1b9cfd Better detection of the DHT11 sensors. Read DHT11 with errors detection and reapeated tries.
Michiel Broek <mbroek@mbse.eu>
parents: 647
diff changeset
932 dht11Read(device->address);
645
49eb753a958b All thread locks from wiringPi to standard pthreads.
Michiel Broek <mbroek@mbse.eu>
parents: 644
diff changeset
933 pthread_mutex_lock(&mutexes[LOCK_DEVICES]);
648
62c5ed1b9cfd Better detection of the DHT11 sensors. Read DHT11 with errors detection and reapeated tries.
Michiel Broek <mbroek@mbse.eu>
parents: 647
diff changeset
934 device->present = dht11_state;
62c5ed1b9cfd Better detection of the DHT11 sensors. Read DHT11 with errors detection and reapeated tries.
Michiel Broek <mbroek@mbse.eu>
parents: 647
diff changeset
935 if (dht11_state == DEVPRESENT_YES) {
647
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
936 device->value = dht11_temperature;
586
504463dad07d Changed 1-wire DS18B20 sensor error check.
Michiel Broek <mbroek@mbse.eu>
parents: 585
diff changeset
937 device->timestamp = time(NULL);
504463dad07d Changed 1-wire DS18B20 sensor error check.
Michiel Broek <mbroek@mbse.eu>
parents: 585
diff changeset
938 }
645
49eb753a958b All thread locks from wiringPi to standard pthreads.
Michiel Broek <mbroek@mbse.eu>
parents: 644
diff changeset
939 pthread_mutex_unlock(&mutexes[LOCK_DEVICES]);
586
504463dad07d Changed 1-wire DS18B20 sensor error check.
Michiel Broek <mbroek@mbse.eu>
parents: 585
diff changeset
940 } else if (device->subdevice == 1) {
650
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
941 /* Data already present, valid or not. */
645
49eb753a958b All thread locks from wiringPi to standard pthreads.
Michiel Broek <mbroek@mbse.eu>
parents: 644
diff changeset
942 pthread_mutex_lock(&mutexes[LOCK_DEVICES]);
648
62c5ed1b9cfd Better detection of the DHT11 sensors. Read DHT11 with errors detection and reapeated tries.
Michiel Broek <mbroek@mbse.eu>
parents: 647
diff changeset
943 device->present = dht11_state;
62c5ed1b9cfd Better detection of the DHT11 sensors. Read DHT11 with errors detection and reapeated tries.
Michiel Broek <mbroek@mbse.eu>
parents: 647
diff changeset
944 if (dht11_state == DEVPRESENT_YES) {
647
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
945 device->value = dht11_humidity;
586
504463dad07d Changed 1-wire DS18B20 sensor error check.
Michiel Broek <mbroek@mbse.eu>
parents: 585
diff changeset
946 device->timestamp = time(NULL);
650
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
947 dht11_next = now + 29;
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
948 } else {
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
949 dht11_next = now + 1;
0b215e4b814e Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.
Michiel Broek <mbroek@mbse.eu>
parents: 649
diff changeset
950 }
645
49eb753a958b All thread locks from wiringPi to standard pthreads.
Michiel Broek <mbroek@mbse.eu>
parents: 644
diff changeset
951 pthread_mutex_unlock(&mutexes[LOCK_DEVICES]);
203
47e5109c7f53 Added DHT11 sensor code
Michiel Broek <mbroek@mbse.eu>
parents: 202
diff changeset
952 }
585
326cf2982eee More relaxed DHT11 readings
Michiel Broek <mbroek@mbse.eu>
parents: 584
diff changeset
953 }
202
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
954 break;
392
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
955
647
fcd85176ea2e Work to move dht userspace code to kernel module.
Michiel Broek <mbroek@mbse.eu>
parents: 646
diff changeset
956 #ifdef HAVE_WIRINGPI_H
392
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
957 case DEVTYPE_GPIO:
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
958 if (device->direction == DEVDIR_IN_BIN) {
645
49eb753a958b All thread locks from wiringPi to standard pthreads.
Michiel Broek <mbroek@mbse.eu>
parents: 644
diff changeset
959 pthread_mutex_lock(&mutexes[LOCK_DEVICES]);
392
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
960 device->value = digitalRead(device->gpiopin);
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
961 device->offset = 0;
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
962 device->timestamp = time(NULL);
645
49eb753a958b All thread locks from wiringPi to standard pthreads.
Michiel Broek <mbroek@mbse.eu>
parents: 644
diff changeset
963 pthread_mutex_unlock(&mutexes[LOCK_DEVICES]);
392
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
964 }
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
965 break;
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
966
203
47e5109c7f53 Added DHT11 sensor code
Michiel Broek <mbroek@mbse.eu>
parents: 202
diff changeset
967 #endif
259
b7c967359771 Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents: 242
diff changeset
968 #ifdef USE_SIMULATOR
b7c967359771 Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents: 242
diff changeset
969 case DEVTYPE_SIM:
645
49eb753a958b All thread locks from wiringPi to standard pthreads.
Michiel Broek <mbroek@mbse.eu>
parents: 644
diff changeset
970 pthread_mutex_lock(&mutexes[LOCK_DEVICES]);
262
d0014ccec615 Simulation of fridge cold loss to the room added for testing.
Michiel Broek <mbroek@mbse.eu>
parents: 259
diff changeset
971 if (Config.simulators) {
d0014ccec615 Simulation of fridge cold loss to the room added for testing.
Michiel Broek <mbroek@mbse.eu>
parents: 259
diff changeset
972 simulator = Config.simulators;
d0014ccec615 Simulation of fridge cold loss to the room added for testing.
Michiel Broek <mbroek@mbse.eu>
parents: 259
diff changeset
973 if (device->subdevice == 0) {
482
68f4468bfc24 Simulate sensors resolution.
Michiel Broek <mbroek@mbse.eu>
parents: 437
diff changeset
974 device->value = (int)((int)(simulator->room_temperature * 1000) / 500) * 500;
262
d0014ccec615 Simulation of fridge cold loss to the room added for testing.
Michiel Broek <mbroek@mbse.eu>
parents: 259
diff changeset
975 device->timestamp = time(NULL);
d0014ccec615 Simulation of fridge cold loss to the room added for testing.
Michiel Broek <mbroek@mbse.eu>
parents: 259
diff changeset
976 } else if (device->subdevice == 1) {
506
cdcd07bbee30 New MQTT protocol
Michiel Broek <mbroek@mbse.eu>
parents: 482
diff changeset
977 device->value = (int)((int)(simulator->air_temperature * 1000) / 62.5) * 62.5;
262
d0014ccec615 Simulation of fridge cold loss to the room added for testing.
Michiel Broek <mbroek@mbse.eu>
parents: 259
diff changeset
978 device->timestamp = time(NULL);
d0014ccec615 Simulation of fridge cold loss to the room added for testing.
Michiel Broek <mbroek@mbse.eu>
parents: 259
diff changeset
979 } else if (device->subdevice == 2) {
506
cdcd07bbee30 New MQTT protocol
Michiel Broek <mbroek@mbse.eu>
parents: 482
diff changeset
980 device->value = (int)((int)(simulator->beer_temperature * 1000) / 62.5) * 62.5;
262
d0014ccec615 Simulation of fridge cold loss to the room added for testing.
Michiel Broek <mbroek@mbse.eu>
parents: 259
diff changeset
981 device->timestamp = time(NULL);
553
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
982 } else if (device->subdevice == 5) {
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
983 device->value = (int)((int)(simulator->room_humidity * 1000) / 500) * 500;
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
984 device->timestamp = time(NULL);
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
985 } else if (device->subdevice == 6) {
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
986 device->value = (int)((int)(simulator->chiller_temperature * 1000) / 62.5) * 62.5;
4091d4fe217f Updated simulator with more simulated devices.
Michiel Broek <mbroek@mbse.eu>
parents: 528
diff changeset
987 device->timestamp = time(NULL);
262
d0014ccec615 Simulation of fridge cold loss to the room added for testing.
Michiel Broek <mbroek@mbse.eu>
parents: 259
diff changeset
988 }
259
b7c967359771 Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents: 242
diff changeset
989 }
645
49eb753a958b All thread locks from wiringPi to standard pthreads.
Michiel Broek <mbroek@mbse.eu>
parents: 644
diff changeset
990 pthread_mutex_unlock(&mutexes[LOCK_DEVICES]);
259
b7c967359771 Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents: 242
diff changeset
991 break;
b7c967359771 Added framework for a simulation of a fridge with heater to use as controlled fermentor
Michiel Broek <mbroek@mbse.eu>
parents: 242
diff changeset
992 #endif
164
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
993 default:
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
994 break;
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
995 }
212
a76cbe676bf1 Code cleanup
Michiel Broek <mbroek@mbse.eu>
parents: 209
diff changeset
996
a76cbe676bf1 Code cleanup
Michiel Broek <mbroek@mbse.eu>
parents: 209
diff changeset
997 /*
a76cbe676bf1 Code cleanup
Michiel Broek <mbroek@mbse.eu>
parents: 209
diff changeset
998 * Delay a bit after procesing a device.
a76cbe676bf1 Code cleanup
Michiel Broek <mbroek@mbse.eu>
parents: 209
diff changeset
999 */
652
16d3d4b58b5b Moved all delay functions into a new general file.
Michiel Broek <mbroek@mbse.eu>
parents: 650
diff changeset
1000 mDelay(10);
212
a76cbe676bf1 Code cleanup
Michiel Broek <mbroek@mbse.eu>
parents: 209
diff changeset
1001 }
437
5664743eaf2f Stop devices thread if the program ends.
Michiel Broek <mbroek@mbse.eu>
parents: 408
diff changeset
1002 if (my_shutdown)
5664743eaf2f Stop devices thread if the program ends.
Michiel Broek <mbroek@mbse.eu>
parents: 408
diff changeset
1003 break;
215
5ad534c79a22 Do not use 100% cpu on a system without devices
Michiel Broek <mbroek@mbse.eu>
parents: 213
diff changeset
1004 /*
5ad534c79a22 Do not use 100% cpu on a system without devices
Michiel Broek <mbroek@mbse.eu>
parents: 213
diff changeset
1005 * Delay a bit after all devices
5ad534c79a22 Do not use 100% cpu on a system without devices
Michiel Broek <mbroek@mbse.eu>
parents: 213
diff changeset
1006 */
652
16d3d4b58b5b Moved all delay functions into a new general file.
Michiel Broek <mbroek@mbse.eu>
parents: 650
diff changeset
1007 mDelay(100);
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1008 }
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1009
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1010 syslog(LOG_NOTICE, "Thread my_devices_loop stopped");
646
e3edc783006b Running threads and locking doesn't depend on wiringPi anymore.
Michiel Broek <mbroek@mbse.eu>
parents: 645
diff changeset
1011 my_devices_state = 0;
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1012 return 0;
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1013 }
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1014
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1015
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1016

mercurial