thermferm/devices.c

Tue, 15 Sep 2015 15:37:39 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Tue, 15 Sep 2015 15:37:39 +0200
changeset 394
14231379bec2
parent 393
220f2f30bf68
child 395
e32e83550963
permissions
-rw-r--r--

Spelling correction.

158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1 /*****************************************************************************
325
35b6f6605ae3 More device locks in the network server
Michiel Broek <mbroek@mbse.eu>
parents: 324
diff changeset
2 * Copyright (C) 2014..2015
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"
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
24 #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
25 #include "rc-switch.h"
202
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
26 #include "panel.h"
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
27 #include "xutil.h"
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
28
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 extern int debug;
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
31 extern sys_config Config;
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
32 extern int my_shutdown;
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
33
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
34 #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
35
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
36 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
37 extern int SIMheating;
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 #endif
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
40
202
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
41 #ifdef HAVE_WIRINGPI_H
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
42
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
43 #define MAXTIMINGS 100
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
44
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
45 int dht11_pin = -1;
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
46 int dht11_temperature = -1;
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
47 int dht11_humidity = -1;
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
48 int dht11_valid = FALSE;
220
382938c5fce2 Make sure we don't read the DHT11 within 2 seconds.
Michiel Broek <mbroek@mbse.eu>
parents: 215
diff changeset
49 time_t dht11_last = (time_t)0;
202
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
50
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
51
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
52 static uint8_t sizecvt(const int read_value) {
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
53 /*
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
54 * digitalRead() and friends from wiringpi are defined as returning a value
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
55 * < 256. However, they are returned as int() types. This is a safety function
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 if (read_value > 255 || read_value < 0) {
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
58 syslog(LOG_NOTICE, "invalid data from wiringPi library");
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
59 }
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
60
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
61 return (uint8_t)read_value;
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
62 }
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
63
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
64
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
65
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
66 /*
213
2317b8d644fa Code cleanup, streamlined error messages.
Michiel Broek <mbroek@mbse.eu>
parents: 212
diff changeset
67 * DHT11 sensor read.
202
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
68 */
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
69 void dht11Read(void) {
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
70 int tries = 5;
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
71 unsigned short got_correct_data = 0;
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
72
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
73 if (dht11_pin == -1)
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
74 return;
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
75
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
76 while (tries && !got_correct_data) {
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
77 uint8_t laststate = HIGH;
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
78 uint8_t counter = 0;
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
79 uint8_t j = 0, i = 0;
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
80 int dht11_dat[5] = {0,0,0,0,0};
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
81
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
82 /*
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
83 * Select output mode to send the start signal.
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
84 */
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
85 pinMode(dht11_pin, OUTPUT);
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
86 digitalWrite(dht11_pin, HIGH);
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
87 usleep(1000);
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
88
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
89 /*
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
90 * Low for at least 18 milliseconds
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
91 */
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
92 digitalWrite(dht11_pin, LOW);
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
93 usleep(20000);
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
94 digitalWrite(dht11_pin, HIGH);
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
95 pinMode(dht11_pin, INPUT);
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
96
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
97 /*
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
98 * Detect change and read data
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
99 */
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
100 for (i=0; i<MAXTIMINGS; i++) {
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
101 counter = 0;
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
102 delayMicroseconds(10);
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
103 while (sizecvt(digitalRead(dht11_pin)) == laststate) {
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
104 counter++;
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
105 delayMicroseconds(1);
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
106 if (counter == 255) {
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
107 break;
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
108 }
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
109 }
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
110 laststate = sizecvt(digitalRead(dht11_pin));
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
111
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
112 if (counter == 255)
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
113 break;
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
114
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
115 /*
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
116 * ignore first 3 transitions
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
117 */
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
118 if ((i >= 4) && (i%2 == 0)) {
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
119
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
120 // shove each bit into the storage bytes
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
121 dht11_dat[(int)((double)j/8)] <<= 1;
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
122 if (counter > 16)
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
123 dht11_dat[(int)((double)j/8)] |= 1;
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
124 j++;
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
125 }
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
126 }
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
127
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
128 /*
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
129 * If there is no sensor, j = 0
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
130 */
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
131 if ((counter == 255) && (j == 0)) {
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
132 if (dht11_temperature != -1) {
268
dda91dfa4aa8 All syslog logging only to LOG_NOTICE
Michiel Broek <mbroek@mbse.eu>
parents: 262
diff changeset
133 syslog(LOG_NOTICE, "dht11 sensor disappeared");
202
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
134 } else {
268
dda91dfa4aa8 All syslog logging only to LOG_NOTICE
Michiel Broek <mbroek@mbse.eu>
parents: 262
diff changeset
135 syslog(LOG_NOTICE, "dht11 sensor not present");
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 dht11_temperature = -1;
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
138 dht11_humidity = -1;
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
139 dht11_valid = FALSE;
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
140 return;
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
141 }
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
142
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
143 /*
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
144 * check we read 40 bits (8bit x 5 ) + verify checksum in the last byte
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
145 * print it out if data is good
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
146 */
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
147 if ((j >= 40) && (dht11_dat[4] == ((dht11_dat[0] + dht11_dat[1] + dht11_dat[2] + dht11_dat[3]) & 0xFF))) {
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
148 got_correct_data = 1;
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
149
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
150 int h = dht11_dat[0] + dht11_dat[1];
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
151 int t = (dht11_dat[2] & 0x7F) + dht11_dat[3];
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
152
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
153 if ((dht11_dat[2] & 0x80) != 0)
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
154 t *= -1;
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
155
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
156 dht11_temperature = t;
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
157 dht11_humidity = h;
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
158 dht11_valid = TRUE;
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
159 } else {
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
160 tries--;
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
161 if (tries == 0)
268
dda91dfa4aa8 All syslog logging only to LOG_NOTICE
Michiel Broek <mbroek@mbse.eu>
parents: 262
diff changeset
162 syslog(LOG_NOTICE, "dht11 data checksum was wrong 5 times");
202
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
163 usleep(100000);
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
164 }
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
165 }
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
166 }
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
167
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
168 #endif
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
169
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
170
392
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
171 /*
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
172 * 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
173 */
347
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
174 int read_w1(char *address, char *file)
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
175 {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
176 char *addr = NULL;
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
177 int fn = -1, rc = -1, retries = 5;
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
178 uint8_t val;
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 addr = xstrcpy((char *)"/sys/bus/w1/devices/");
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
181 addr = xstrcat(addr, address);
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
182 addr = xstrcat(addr, (char *)"/");
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
183 addr = xstrcat(addr, file);
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 if ((fn = open(addr, O_RDONLY)) >= 0) {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
186
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
187 if ((lseek(fn, 0L, SEEK_SET)) == 0) {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
188
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
189 while (retries--) {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
190 if ((read(fn, &val, 1)) == 1) {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
191 rc = (int)val;
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
192 goto leave;
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
193 }
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 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
196
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
197 } else {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
198 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
199 }
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
200
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
201 } else {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
202 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
203 }
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
204
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
205 leave:
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
206 if (fn != -1) {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
207 if ((close(fn)) == -1) {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
208 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
209 }
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
210 }
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 free(addr);
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
213 return rc;
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
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
217
392
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
218 /*
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
219 * 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
220 */
347
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
221 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
222 {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
223 char *addr = NULL;
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
224 int fn = -1, rc = -1, retries = 5;
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 addr = xstrcpy((char *)"/sys/bus/w1/devices/");
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
227 addr = xstrcat(addr, address);
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
228 addr = xstrcat(addr, (char *)"/");
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
229 addr = xstrcat(addr, file);
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 if ((fn = open(addr, O_WRONLY)) >= 0) {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
232
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
233 if ((lseek(fn, 0L, SEEK_SET)) == 0) {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
234
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
235 while (retries--) {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
236 if ((write(fn, &val, 1)) == 1) {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
237 rc = 0;
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
238 goto leave;
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
239 // } else {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
240 // syslog(LOG_NOTICE, "write_w1() write %s try=%d: %s", addr, retries, strerror(errno));
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
241 }
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
242 }
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
243 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
244
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
245 } else {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
246 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
247 }
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
248
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
249 } else {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
250 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
251 }
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
252
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
253 leave:
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
254 if (fn != -1) {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
255 if ((close(fn)) == -1) {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
256 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
257 }
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
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
260 free(addr);
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
261 return rc;
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
262 }
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
179
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
265
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
266 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
267 {
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
268 devices_list *device;
323
608592f74b10 Added extra lock
Michiel Broek <mbroek@mbse.eu>
parents: 268
diff changeset
269 time_t now, my_timestamp;
354
5ff387f4d6b7 Fixed compile issue on non-Pi systems
Michiel Broek <mbroek@mbse.eu>
parents: 351
diff changeset
270 int rc, my_value, test_value;
187
3c8bf18fdf42 Updated conditional defines and dependencies
Michiel Broek <mbroek@mbse.eu>
parents: 185
diff changeset
271 #ifdef HAVE_WIRINGPI_H
354
5ff387f4d6b7 Fixed compile issue on non-Pi systems
Michiel Broek <mbroek@mbse.eu>
parents: 351
diff changeset
272 int i;
187
3c8bf18fdf42 Updated conditional defines and dependencies
Michiel Broek <mbroek@mbse.eu>
parents: 185
diff changeset
273 char buf[40];
3c8bf18fdf42 Updated conditional defines and dependencies
Michiel Broek <mbroek@mbse.eu>
parents: 185
diff changeset
274 #endif
179
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
275
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
276 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
277 return 0;
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
278
185
4f34271cf1e7 PID finetuning
Michiel Broek <mbroek@mbse.eu>
parents: 181
diff changeset
279 now = time(NULL);
181
4099412fca09 Fixed double commands to 433 MHz switches, they did not switch.
Michiel Broek <mbroek@mbse.eu>
parents: 179
diff changeset
280
337
5d3670aafd1b More global device locking
Michiel Broek <mbroek@mbse.eu>
parents: 325
diff changeset
281 #ifdef HAVE_WIRINGPI_H
5d3670aafd1b More global device locking
Michiel Broek <mbroek@mbse.eu>
parents: 325
diff changeset
282 piLock(LOCK_DEVICES);
5d3670aafd1b More global device locking
Michiel Broek <mbroek@mbse.eu>
parents: 325
diff changeset
283 #endif
5d3670aafd1b More global device locking
Michiel Broek <mbroek@mbse.eu>
parents: 325
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 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
286 if (! strcmp(uuid, device->uuid)) {
185
4f34271cf1e7 PID finetuning
Michiel Broek <mbroek@mbse.eu>
parents: 181
diff changeset
287 /*
4f34271cf1e7 PID finetuning
Michiel Broek <mbroek@mbse.eu>
parents: 181
diff changeset
288 * Execute command if different then the old value. But also
212
a76cbe676bf1 Code cleanup
Michiel Broek <mbroek@mbse.eu>
parents: 209
diff changeset
289 * every 2 minutes because commands can have temporary
a76cbe676bf1 Code cleanup
Michiel Broek <mbroek@mbse.eu>
parents: 209
diff changeset
290 * disconnects, or have radio problems.
185
4f34271cf1e7 PID finetuning
Michiel Broek <mbroek@mbse.eu>
parents: 181
diff changeset
291 */
323
608592f74b10 Added extra lock
Michiel Broek <mbroek@mbse.eu>
parents: 268
diff changeset
292 my_timestamp = device->timestamp;
608592f74b10 Added extra lock
Michiel Broek <mbroek@mbse.eu>
parents: 268
diff changeset
293 my_value = device->value;
347
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
294
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
295 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
296 test_value = (value == 0) ? 0 : 1;
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
297 } else {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
298 test_value = value;
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
299 }
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
300
351
d8c410c320db Fixed auto device update timer
Michiel Broek <mbroek@mbse.eu>
parents: 348
diff changeset
301 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
302
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
303 #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
304 rc = 0;
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
305 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
306 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
307 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
308 if (buf[i] == '-')
240
6bdda35b4a13 Added thread locks for device processing
Michiel Broek <mbroek@mbse.eu>
parents: 239
diff changeset
309 buf[i] = ',';
337
5d3670aafd1b More global device locking
Michiel Broek <mbroek@mbse.eu>
parents: 325
diff changeset
310 piUnlock(LOCK_DEVICES);
240
6bdda35b4a13 Added thread locks for device processing
Michiel Broek <mbroek@mbse.eu>
parents: 239
diff changeset
311 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
312 rc = toggleSwitch(buf);
240
6bdda35b4a13 Added thread locks for device processing
Michiel Broek <mbroek@mbse.eu>
parents: 239
diff changeset
313 disableTransmit();
337
5d3670aafd1b More global device locking
Michiel Broek <mbroek@mbse.eu>
parents: 325
diff changeset
314 piLock(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
315 syslog(LOG_NOTICE, "RC433 command %s rc=%d", buf, rc);
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
316 if (debug)
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
317 fprintf(stdout, "RC433 command %s rc=%d\n", buf, rc);
212
a76cbe676bf1 Code cleanup
Michiel Broek <mbroek@mbse.eu>
parents: 209
diff changeset
318 device->value = value;
a76cbe676bf1 Code cleanup
Michiel Broek <mbroek@mbse.eu>
parents: 209
diff changeset
319 device->timestamp = time(NULL);
240
6bdda35b4a13 Added thread locks for device processing
Michiel Broek <mbroek@mbse.eu>
parents: 239
diff changeset
320 piUnlock(LOCK_DEVICES);
212
a76cbe676bf1 Code cleanup
Michiel Broek <mbroek@mbse.eu>
parents: 209
diff changeset
321 return rc;
a76cbe676bf1 Code cleanup
Michiel Broek <mbroek@mbse.eu>
parents: 209
diff changeset
322 }
179
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
323
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
324 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
325
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
326 }
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
327 #endif
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
328 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
329 if (strncmp(device->address, (char *)"3a", 2) == 0) {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
330 /*
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
331 * 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
332 * 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
333 * 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
334 */
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
335 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
336
347
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
337 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
338 state = (unsigned int)rc;
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
339 output = (state & 0x01) + ((state & 0x04) >> 1);
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
340
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
341 if (device->subdevice == 0) {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
342 output = (output & 0xfe);
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
343 output |= (value == 0) ? 0x01 : 0x00;
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
344 } else if (device->subdevice == 1) {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
345 output = (output & 0xfd);
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
346 output |= (value == 0) ? 0x02 : 0x00;
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
347 } else {
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
348 output = 0xff;
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
349 }
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
350
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
351 if ((write_w1(device->address, (char *)"output", output)) == 0) {
348
ffc4b8aa824f Changed Fan switch logic.
Michiel Broek <mbroek@mbse.eu>
parents: 347
diff changeset
352 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
353 if (debug)
348
ffc4b8aa824f Changed Fan switch logic.
Michiel Broek <mbroek@mbse.eu>
parents: 347
diff changeset
354 fprintf(stdout, "DS2413 PIO%c value=%d (%s)\n", (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
355 device->value = (value == 0) ? 0 : 1;
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
356 device->timestamp = time(NULL);
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
357 }
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
358 }
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
359 }
179
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
360 }
347
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
361
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
362 #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
363 if ((device->type == DEVTYPE_SIM) && (device->direction == DEVDIR_OUT_BIN) && (device->present == DEVPRESENT_YES)) {
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
364 if ((strcmp((char *)"SimCooler", device->address) == 0) || (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
365 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
366 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
367 if (debug)
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
368 fprintf(stdout, "SIM %s value=%d\n", 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
369 }
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
370 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
371 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
372 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
373 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
374 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
375 SIMheating = 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
376 }
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
377 }
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
378 #endif
179
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
379 } else {
337
5d3670aafd1b More global device locking
Michiel Broek <mbroek@mbse.eu>
parents: 325
diff changeset
380 #ifdef HAVE_WIRINGPI_H
5d3670aafd1b More global device locking
Michiel Broek <mbroek@mbse.eu>
parents: 325
diff changeset
381 piUnlock(LOCK_DEVICES);
5d3670aafd1b More global device locking
Michiel Broek <mbroek@mbse.eu>
parents: 325
diff changeset
382 #endif
179
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
383 return 0;
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
384 }
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
385 }
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
386 }
337
5d3670aafd1b More global device locking
Michiel Broek <mbroek@mbse.eu>
parents: 325
diff changeset
387 #ifdef HAVE_WIRINGPI_H
5d3670aafd1b More global device locking
Michiel Broek <mbroek@mbse.eu>
parents: 325
diff changeset
388 piUnlock(LOCK_DEVICES);
5d3670aafd1b More global device locking
Michiel Broek <mbroek@mbse.eu>
parents: 325
diff changeset
389 #endif
185
4f34271cf1e7 PID finetuning
Michiel Broek <mbroek@mbse.eu>
parents: 181
diff changeset
390
179
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
391 return 0;
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
392 }
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
393
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
394
392
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
395 /*
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
396 * Returns 0 if failed.
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
397 * Returns 1 if success, value contains new value.
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
398 */
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
399 int device_in(char *uuid, int *value)
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
400 {
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
401 devices_list *device;
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
402
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
403 if (uuid == NULL)
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
404 return 0;
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
405
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
406 #ifdef HAVE_WIRINGPI_H
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
407 piLock(LOCK_DEVICES);
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
408 #endif
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
409
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
410 for (device = Config.devices; device; device = device->next) {
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
411 if (! strcmp(uuid, device->uuid)) {
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
412
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
413 }
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
414 }
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
415
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
416 #ifdef HAVE_WIRINGPI_H
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
417 piUnlock(LOCK_DEVICES);
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
418 #endif
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
419
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
420 return 0;
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
421 }
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
422
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
423
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
424
179
417ee898fb02 Added PID implementation and 433 MHz radio control switches. Not reliable yet.
Michiel Broek <mbroek@mbse.eu>
parents: 166
diff changeset
425
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
426 /*
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
427 * Auto detect hotplugged or known to be present devices
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
428 */
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
429 int devices_detect(void)
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
430 {
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
431 struct dirent *de;
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
432 DIR *fd;
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
433 devices_list *device, *ndev;
340
5b49416eb116 Experimental idea
Michiel Broek <mbroek@mbse.eu>
parents: 338
diff changeset
434 int found, subdevices, ival, i, rc = 0;
162
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
435 char buf[40];
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
436 uuid_t uu;
162
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
437 #ifdef HAVE_WIRINGPI_H
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
438 int pin;
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
439 #endif
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
440
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
441 /*
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
442 * Scan for 1-wire devices
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
443 */
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
444 if ((fd = opendir((char *)"/sys/bus/w1/devices"))) {
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
445 while ((de = readdir(fd))) {
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
446 if (de->d_name[0] != '.') {
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
447 found = FALSE;
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
448 for (device = Config.devices; device; device = device->next) {
161
493e39bb0a08 Small fixes for device configuration
Michiel Broek <mbroek@mbse.eu>
parents: 158
diff changeset
449 if (strcmp(device->address,de->d_name) == 0) {
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
450 found = TRUE;
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
451 break;
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
452 }
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
453 }
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
454
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
455 if (found == FALSE) {
162
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
456 strncpy(buf, de->d_name, 2);
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
457 buf[2] = '\0';
340
5b49416eb116 Experimental idea
Michiel Broek <mbroek@mbse.eu>
parents: 338
diff changeset
458 sscanf(buf, "%02x", &ival);
5b49416eb116 Experimental idea
Michiel Broek <mbroek@mbse.eu>
parents: 338
diff changeset
459 syslog(LOG_NOTICE, "Scan 1-wire %02x %d", ival, ival);
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
460 subdevices = 1;
162
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
461 if (strcmp(buf, (char *)"29") == 0)
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
462 subdevices = 8;
162
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
463 if (strcmp(buf, (char *)"3a") == 0)
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
464 subdevices = 2;
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
465 for (i = 0; i < subdevices; i++) {
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
466 ndev = (devices_list *)malloc(sizeof(devices_list));
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
467 ndev->next = NULL;
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
468 ndev->version = 1;
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
469 ndev->uuid = malloc(37);
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
470 uuid_generate(uu);
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
471 uuid_unparse(uu, ndev->uuid);
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
472 ndev->type = DEVTYPE_W1;
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
473 ndev->direction = DEVDIR_UNDEF;
162
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
474 if (strcmp(buf, (char *)"10") == 0) {
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
475 ndev->direction = DEVDIR_IN_ANALOG;
162
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
476 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
477 } 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
478 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
479 ndev->description = xstrcpy((char *)"DS1820 Digital thermometer");
162
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
480 } else if (strcmp(buf, (char *)"28") == 0) {
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
481 ndev->direction = DEVDIR_IN_ANALOG;
162
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
482 ndev->description = xstrcpy((char *)"DS18B20 Digital thermometer");
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
483 } else if (strcmp(buf, (char *)"29") == 0) {
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
484 ndev->description = xstrcpy((char *)"DS2408 8 Channel addressable switch/LCD");
344
acd840c9fcc0 Fixed Offset label in device editor. Added code to edit pin states for DS2408 and DS2413 1-wire devices.
Michiel Broek <mbroek@mbse.eu>
parents: 343
diff changeset
485 ndev->direction = DEVDIR_IN_BIN;
162
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
486 } else if (strcmp(buf, (char *)"3a") == 0) {
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
487 ndev->description = xstrcpy((char *)"DS2413 Dual channel addressable switch");
344
acd840c9fcc0 Fixed Offset label in device editor. Added code to edit pin states for DS2408 and DS2413 1-wire devices.
Michiel Broek <mbroek@mbse.eu>
parents: 343
diff changeset
488 ndev->direction = DEVDIR_IN_BIN;
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
489 } 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
490 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
491 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
492 } 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
493 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
494 ndev->description = xstrcpy((char *)"DS28EA00 Digital thermometer");
162
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
495 } else if (strcmp(buf, (char *)"w1") == 0) {
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
496 ndev->description = xstrcpy((char *)"Master System device");
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
497 } else {
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
498 ndev->description = xstrcpy((char *)"Unknown device family ");
162
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
499 ndev->description = xstrcat(ndev->description, buf);
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
500 }
343
ba3a2d27d59e Initialize offset to zero with new detected 1-wire devices.
Michiel Broek <mbroek@mbse.eu>
parents: 342
diff changeset
501 ndev->value = ndev->offset = ndev->inuse = 0;
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
502 ndev->present = DEVPRESENT_YES;
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
503 ndev->address = xstrcpy(de->d_name);
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
504 ndev->subdevice = i;
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
505 ndev->gpiopin = -1;
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
506 ndev->comment = xstrcpy((char *)"Auto detected device");
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
507 ndev->timestamp = time(NULL);
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
508
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
509 if (Config.devices == NULL) {
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
510 Config.devices = ndev;
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
511 } else {
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
512 for (device = Config.devices; device; device = device->next) {
161
493e39bb0a08 Small fixes for device configuration
Michiel Broek <mbroek@mbse.eu>
parents: 158
diff changeset
513 if (device->next == NULL) {
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
514 device->next = ndev;
161
493e39bb0a08 Small fixes for device configuration
Michiel Broek <mbroek@mbse.eu>
parents: 158
diff changeset
515 break;
493e39bb0a08 Small fixes for device configuration
Michiel Broek <mbroek@mbse.eu>
parents: 158
diff changeset
516 }
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
517 }
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
518 }
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
519 rc++;
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
520 }
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
521 }
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
522 }
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
523 }
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
524 closedir(fd);
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
525 }
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
526
162
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
527 #ifdef HAVE_WIRINGPI_H
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
528 if (piBoardRev() == 2) {
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
529 /*
324
940a668e568f Update for newer boards
Michiel Broek <mbroek@mbse.eu>
parents: 323
diff changeset
530 * Support rev B and newer boards only
162
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
531 */
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
532 found = FALSE;
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
533 for (device = Config.devices; device; device = device->next) {
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
534 if (device->type == DEVTYPE_GPIO) {
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
535 found = TRUE;
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
536 break;
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
537 }
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
538 }
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
539
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
540 if (found == FALSE) {
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
541 /*
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
542 * There were no GPIO devices found.
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
543 */
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
544 subdevices = 12;
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
545 pin = 0;
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
546 for (i = 0; i < subdevices; i++) {
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
547 if (i == 8)
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
548 pin = 17;
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
549
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
550 ndev = (devices_list *)malloc(sizeof(devices_list));
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
551 ndev->next = NULL;
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
552 ndev->version = 1;
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
553 ndev->uuid = malloc(37);
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
554 uuid_generate(uu);
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
555 uuid_unparse(uu, ndev->uuid);
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
556 ndev->type = DEVTYPE_GPIO;
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
557 ndev->value = digitalRead(pin);
392
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
558 ndev->offset = 0;
162
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
559 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
560 ndev->address = xstrcpy((char *)"GPIO");
162
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
561 snprintf(buf, 39, "Raspberry GPIO %d", i);
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
562 ndev->description = xstrcpy(buf);
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
563 ndev->subdevice = i;
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
564 ndev->gpiopin = pin;
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
565 ndev->timestamp = time(NULL);
393
220f2f30bf68 Fixed initialisation of new GPIO RS433 and DHT11 devices.
Michiel Broek <mbroek@mbse.eu>
parents: 392
diff changeset
566 if (i == 0) {
220f2f30bf68 Fixed initialisation of new GPIO RS433 and DHT11 devices.
Michiel Broek <mbroek@mbse.eu>
parents: 392
diff changeset
567 ndev->direction = DEVDIR_INTERN;
220f2f30bf68 Fixed initialisation of new GPIO RS433 and DHT11 devices.
Michiel Broek <mbroek@mbse.eu>
parents: 392
diff changeset
568 ndev->inuse = 1;
394
14231379bec2 Spelling correction.
Michiel Broek <mbroek@mbse.eu>
parents: 393
diff changeset
569 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
570 } else if (i == 3) {
220f2f30bf68 Fixed initialisation of new GPIO RS433 and DHT11 devices.
Michiel Broek <mbroek@mbse.eu>
parents: 392
diff changeset
571 ndev->direction = DEVDIR_INTERN;
220f2f30bf68 Fixed initialisation of new GPIO RS433 and DHT11 devices.
Michiel Broek <mbroek@mbse.eu>
parents: 392
diff changeset
572 ndev->inuse = 1;
220f2f30bf68 Fixed initialisation of new GPIO RS433 and DHT11 devices.
Michiel Broek <mbroek@mbse.eu>
parents: 392
diff changeset
573 ndev->comment = xstrcpy((char *)"DHT11 room sensor");
220f2f30bf68 Fixed initialisation of new GPIO RS433 and DHT11 devices.
Michiel Broek <mbroek@mbse.eu>
parents: 392
diff changeset
574 } else if (i == PANEL_LED) {
202
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
575 ndev->direction = DEVDIR_OUT_BIN;
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
576 ndev->inuse = 1;
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
577 ndev->comment = xstrcpy((char *)"Frontpanel LED");
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
578 } else if (i == PANEL_ENTER) {
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
579 ndev->direction = DEVDIR_IN_BIN;
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
580 ndev->inuse = 1;
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
581 ndev->comment = xstrcpy((char *)"Frontpanel Enter key");
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
582 } else if (i == PANEL_DOWN) {
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
583 ndev->direction = DEVDIR_IN_BIN;
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
584 ndev->inuse = 1;
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
585 ndev->comment = xstrcpy((char *)"Frontpanel Down key");
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
586 } else if (i == PANEL_UP) {
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
587 ndev->direction = DEVDIR_IN_BIN;
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
588 ndev->inuse = 1;
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
589 ndev->comment = xstrcpy((char *)"Frontpanel Up key");
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
590 } else if (i == 7) {
162
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
591 ndev->direction = DEVDIR_INTERN;
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
592 ndev->inuse = 1;
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
593 ndev->comment = xstrcpy((char *)"1-Wire bus");
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
594 } else {
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
595 ndev->direction = DEVDIR_IN_BIN;
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
596 ndev->inuse = 0;
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
597 ndev->comment = xstrcpy((char *)"Raspberry GPIO");
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
598 }
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
599 pin++;
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
600
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
601 if (Config.devices == NULL) {
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
602 Config.devices = ndev;
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
603 } else {
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
604 for (device = Config.devices; device; device = device->next) {
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
605 if (device->next == NULL) {
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
606 device->next = ndev;
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
607 break;
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
608 }
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
609 }
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
610 }
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
611 rc++;
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
612 }
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
613 }
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
614 }
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
615 #endif
6fc9e3f7962f Added Raspberry GPIO devices
Michiel Broek <mbroek@mbse.eu>
parents: 161
diff changeset
616
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
617 #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
618 found = FALSE;
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
619 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
620 if (device->type == DEVTYPE_SIM) {
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
621 found = TRUE;
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
622 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
623 }
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
624 }
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
625
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
626 if (found == FALSE) {
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
627 subdevices = 5;
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
628 for (i = 0; i < subdevices; i++) {
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
629 ndev = (devices_list *)malloc(sizeof(devices_list));
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
630 ndev->next = NULL;
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
631 ndev->version = 1;
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
632 ndev->uuid = malloc(37);
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
633 uuid_generate(uu);
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
634 uuid_unparse(uu, ndev->uuid);
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
635 ndev->type = DEVTYPE_SIM;
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
636 ndev->value = ndev->offset = 0;
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
637 ndev->present = DEVPRESENT_YES;
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
638 ndev->subdevice = i;
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
639 ndev->gpiopin = -1;
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
640 ndev->comment = xstrcpy((char *)"Auto detected device");
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
641 ndev->timestamp = time(NULL);
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
642 ndev->inuse = 0;
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
643 switch (i) {
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
644 case 0: ndev->direction = DEVDIR_IN_ANALOG;
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
645 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
646 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
647 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
648 case 1: ndev->direction = DEVDIR_IN_ANALOG;
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
649 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
650 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
651 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
652 case 2: ndev->direction = DEVDIR_IN_ANALOG;
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 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
654 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
655 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
656 case 3: ndev->direction = DEVDIR_OUT_ANALOG;
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
657 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
658 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
659 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
660 case 4: ndev->direction = DEVDIR_OUT_ANALOG;
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
661 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
662 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
663 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
664 }
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
665
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
666 if (Config.devices == NULL) {
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
667 Config.devices = ndev;
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
668 } else {
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
669 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
670 if (device->next == NULL) {
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
671 device->next = ndev;
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
672 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
673 }
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
674 }
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
675 }
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 rc++;
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 }
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 }
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
679 #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
680
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
681 return rc;
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
682 }
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
683
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
684
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
685
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
686 #ifdef HAVE_WIRINGPI_H
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
687 PI_THREAD (my_devices_loop)
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
688 #else
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
689 void *my_devices_loop(void *threadid)
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
690 #endif
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
691 {
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
692 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
693 #ifdef USE_SIMULATOR
d0014ccec615 Simulation of fridge cold loss to the room added for testing.
Michiel Broek <mbroek@mbse.eu>
parents: 259
diff changeset
694 simulator_list *simulator;
d0014ccec615 Simulation of fridge cold loss to the room added for testing.
Michiel Broek <mbroek@mbse.eu>
parents: 259
diff changeset
695 #endif
164
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
696 char *addr = NULL, line[60], *p = NULL;
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
697 FILE *fp;
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
698 int temp, rc;
242
d3fe84ece349 Fixed conditionals on systems without wiringPi.
Michiel Broek <mbroek@mbse.eu>
parents: 240
diff changeset
699 #ifdef HAVE_WIRINGPI_H
220
382938c5fce2 Make sure we don't read the DHT11 within 2 seconds.
Michiel Broek <mbroek@mbse.eu>
parents: 215
diff changeset
700 time_t now;
242
d3fe84ece349 Fixed conditionals on systems without wiringPi.
Michiel Broek <mbroek@mbse.eu>
parents: 240
diff changeset
701 #endif
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
702
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
703 syslog(LOG_NOTICE, "Thread my_devices_loop started");
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
704
242
d3fe84ece349 Fixed conditionals on systems without wiringPi.
Michiel Broek <mbroek@mbse.eu>
parents: 240
diff changeset
705 #ifdef HAVE_WIRINGPI_H
d3fe84ece349 Fixed conditionals on systems without wiringPi.
Michiel Broek <mbroek@mbse.eu>
parents: 240
diff changeset
706 if ((rc = piHiPri(10)))
d3fe84ece349 Fixed conditionals on systems without wiringPi.
Michiel Broek <mbroek@mbse.eu>
parents: 240
diff changeset
707 syslog(LOG_NOTICE, "my_devices_loop: piHiPri(10) rc=%d", rc);
d3fe84ece349 Fixed conditionals on systems without wiringPi.
Michiel Broek <mbroek@mbse.eu>
parents: 240
diff changeset
708 #endif
239
793c09ece542 Increase priority for the devices thread
Michiel Broek <mbroek@mbse.eu>
parents: 235
diff changeset
709
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
710 /*
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
711 * Loop forever until the external shutdown variable is set.
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
712 */
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
713 for (;;) {
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
714
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
715 /*
164
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
716 * Process all devices.
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
717 */
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
718 for (device = Config.devices; device; device = device->next) {
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
719
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
720 if (my_shutdown)
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
721 break;
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
722
164
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
723 switch (device->type) {
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
724 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
725 /*
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
726 * 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
727 * 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
728 */
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
729 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
730 (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
731 (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
732 (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
733 (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
734 addr = xstrcpy((char *)"/sys/bus/w1/devices/");
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
735 addr = xstrcat(addr, device->address);
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
736 addr = xstrcat(addr, (char *)"/w1_slave");
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
737 if ((fp = fopen(addr, "r"))) {
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
738 if (device->present != DEVPRESENT_YES) {
268
dda91dfa4aa8 All syslog logging only to LOG_NOTICE
Michiel Broek <mbroek@mbse.eu>
parents: 262
diff changeset
739 syslog(LOG_NOTICE, "sensor %s is back", device->address);
240
6bdda35b4a13 Added thread locks for device processing
Michiel Broek <mbroek@mbse.eu>
parents: 239
diff changeset
740 #ifdef HAVE_WIRINGPI_H
6bdda35b4a13 Added thread locks for device processing
Michiel Broek <mbroek@mbse.eu>
parents: 239
diff changeset
741 piLock(LOCK_DEVICES);
6bdda35b4a13 Added thread locks for device processing
Michiel Broek <mbroek@mbse.eu>
parents: 239
diff changeset
742 #endif
164
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
743 device->present = DEVPRESENT_YES;
240
6bdda35b4a13 Added thread locks for device processing
Michiel Broek <mbroek@mbse.eu>
parents: 239
diff changeset
744 #ifdef HAVE_WIRINGPI_H
6bdda35b4a13 Added thread locks for device processing
Michiel Broek <mbroek@mbse.eu>
parents: 239
diff changeset
745 piUnlock(LOCK_DEVICES);
6bdda35b4a13 Added thread locks for device processing
Michiel Broek <mbroek@mbse.eu>
parents: 239
diff changeset
746 #endif
164
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
747 }
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
748 /*
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
749 * The output looks like:
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
750 * 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
751 * 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
752 */
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
753 fgets(line, 50, fp);
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
754 line[strlen(line)-1] = '\0';
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
755 if ((line[36] == 'Y') && (line[37] == 'E')) {
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
756 /* CRC is Ok, continue */
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
757 fgets(line, 50, fp);
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
758 line[strlen(line)-1] = '\0';
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
759 strtok(line, (char *)"=");
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
760 p = strtok(NULL, (char *)"=");
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
761 rc = sscanf(p, "%d", &temp);
240
6bdda35b4a13 Added thread locks for device processing
Michiel Broek <mbroek@mbse.eu>
parents: 239
diff changeset
762 #ifdef HAVE_WIRINGPI_H
6bdda35b4a13 Added thread locks for device processing
Michiel Broek <mbroek@mbse.eu>
parents: 239
diff changeset
763 piLock(LOCK_DEVICES);
6bdda35b4a13 Added thread locks for device processing
Michiel Broek <mbroek@mbse.eu>
parents: 239
diff changeset
764 #endif
164
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
765 if ((rc == 1) && (device->value != temp)) {
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
766 device->value = temp;
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
767 device->timestamp = time(NULL);
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
768 }
240
6bdda35b4a13 Added thread locks for device processing
Michiel Broek <mbroek@mbse.eu>
parents: 239
diff changeset
769 #ifdef HAVE_WIRINGPI_H
6bdda35b4a13 Added thread locks for device processing
Michiel Broek <mbroek@mbse.eu>
parents: 239
diff changeset
770 piUnlock(LOCK_DEVICES);
6bdda35b4a13 Added thread locks for device processing
Michiel Broek <mbroek@mbse.eu>
parents: 239
diff changeset
771 #endif
164
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
772 } else {
268
dda91dfa4aa8 All syslog logging only to LOG_NOTICE
Michiel Broek <mbroek@mbse.eu>
parents: 262
diff changeset
773 syslog(LOG_NOTICE, "sensor %s CRC error", device->address);
240
6bdda35b4a13 Added thread locks for device processing
Michiel Broek <mbroek@mbse.eu>
parents: 239
diff changeset
774 #ifdef HAVE_WIRINGPI_H
6bdda35b4a13 Added thread locks for device processing
Michiel Broek <mbroek@mbse.eu>
parents: 239
diff changeset
775 piLock(LOCK_DEVICES);
6bdda35b4a13 Added thread locks for device processing
Michiel Broek <mbroek@mbse.eu>
parents: 239
diff changeset
776 #endif
164
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
777 device->present = DEVPRESENT_ERROR;
240
6bdda35b4a13 Added thread locks for device processing
Michiel Broek <mbroek@mbse.eu>
parents: 239
diff changeset
778 #ifdef HAVE_WIRINGPI_H
6bdda35b4a13 Added thread locks for device processing
Michiel Broek <mbroek@mbse.eu>
parents: 239
diff changeset
779 piUnlock(LOCK_DEVICES);
6bdda35b4a13 Added thread locks for device processing
Michiel Broek <mbroek@mbse.eu>
parents: 239
diff changeset
780 #endif
164
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
781 }
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
782 fclose(fp);
164
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
783 } else {
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
784 if (device->present != DEVPRESENT_NO) {
268
dda91dfa4aa8 All syslog logging only to LOG_NOTICE
Michiel Broek <mbroek@mbse.eu>
parents: 262
diff changeset
785 syslog(LOG_NOTICE, "sensor %s is missing", device->address);
240
6bdda35b4a13 Added thread locks for device processing
Michiel Broek <mbroek@mbse.eu>
parents: 239
diff changeset
786 #ifdef HAVE_WIRINGPI_H
6bdda35b4a13 Added thread locks for device processing
Michiel Broek <mbroek@mbse.eu>
parents: 239
diff changeset
787 piLock(LOCK_DEVICES);
6bdda35b4a13 Added thread locks for device processing
Michiel Broek <mbroek@mbse.eu>
parents: 239
diff changeset
788 #endif
164
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
789 device->present = DEVPRESENT_NO;
240
6bdda35b4a13 Added thread locks for device processing
Michiel Broek <mbroek@mbse.eu>
parents: 239
diff changeset
790 #ifdef HAVE_WIRINGPI_H
6bdda35b4a13 Added thread locks for device processing
Michiel Broek <mbroek@mbse.eu>
parents: 239
diff changeset
791 piUnlock(LOCK_DEVICES);
6bdda35b4a13 Added thread locks for device processing
Michiel Broek <mbroek@mbse.eu>
parents: 239
diff changeset
792 #endif
164
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
793 }
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
794 }
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
795 free(addr);
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
796 addr = NULL;
341
cfc952a68d4a Possible part of DS2408 code added.
Michiel Broek <mbroek@mbse.eu>
parents: 340
diff changeset
797 } /* if temperature sensor */
cfc952a68d4a Possible part of DS2408 code added.
Michiel Broek <mbroek@mbse.eu>
parents: 340
diff changeset
798 /*
cfc952a68d4a Possible part of DS2408 code added.
Michiel Broek <mbroek@mbse.eu>
parents: 340
diff changeset
799 * DS2408 8 Channel addressable switch
cfc952a68d4a Possible part of DS2408 code added.
Michiel Broek <mbroek@mbse.eu>
parents: 340
diff changeset
800 */
cfc952a68d4a Possible part of DS2408 code added.
Michiel Broek <mbroek@mbse.eu>
parents: 340
diff changeset
801 if (strncmp(device->address, (char *)"29", 2) == 0) {
cfc952a68d4a Possible part of DS2408 code added.
Michiel Broek <mbroek@mbse.eu>
parents: 340
diff changeset
802 /*
cfc952a68d4a Possible part of DS2408 code added.
Michiel Broek <mbroek@mbse.eu>
parents: 340
diff changeset
803 * Always read current state and set these bits
cfc952a68d4a Possible part of DS2408 code added.
Michiel Broek <mbroek@mbse.eu>
parents: 340
diff changeset
804 * in the subdevices value. We do this even with
cfc952a68d4a Possible part of DS2408 code added.
Michiel Broek <mbroek@mbse.eu>
parents: 340
diff changeset
805 * the output bits, they should match.
cfc952a68d4a Possible part of DS2408 code added.
Michiel Broek <mbroek@mbse.eu>
parents: 340
diff changeset
806 */
cfc952a68d4a Possible part of DS2408 code added.
Michiel Broek <mbroek@mbse.eu>
parents: 340
diff changeset
807 addr = xstrcpy((char *)"/sys/bus/w1/devices/");
cfc952a68d4a Possible part of DS2408 code added.
Michiel Broek <mbroek@mbse.eu>
parents: 340
diff changeset
808 addr = xstrcat(addr, device->address);
cfc952a68d4a Possible part of DS2408 code added.
Michiel Broek <mbroek@mbse.eu>
parents: 340
diff changeset
809 addr = xstrcat(addr, (char *)"/state");
cfc952a68d4a Possible part of DS2408 code added.
Michiel Broek <mbroek@mbse.eu>
parents: 340
diff changeset
810 if ((fp = fopen(addr, "r"))) {
cfc952a68d4a Possible part of DS2408 code added.
Michiel Broek <mbroek@mbse.eu>
parents: 340
diff changeset
811 if (device->present != DEVPRESENT_YES) {
cfc952a68d4a Possible part of DS2408 code added.
Michiel Broek <mbroek@mbse.eu>
parents: 340
diff changeset
812 syslog(LOG_NOTICE, "DS2408 %s is back", device->address);
cfc952a68d4a Possible part of DS2408 code added.
Michiel Broek <mbroek@mbse.eu>
parents: 340
diff changeset
813 #ifdef HAVE_WIRINGPI_H
cfc952a68d4a Possible part of DS2408 code added.
Michiel Broek <mbroek@mbse.eu>
parents: 340
diff changeset
814 piLock(LOCK_DEVICES);
cfc952a68d4a Possible part of DS2408 code added.
Michiel Broek <mbroek@mbse.eu>
parents: 340
diff changeset
815 #endif
cfc952a68d4a Possible part of DS2408 code added.
Michiel Broek <mbroek@mbse.eu>
parents: 340
diff changeset
816 device->present = DEVPRESENT_YES;
cfc952a68d4a Possible part of DS2408 code added.
Michiel Broek <mbroek@mbse.eu>
parents: 340
diff changeset
817 #ifdef HAVE_WIRINGPI_H
cfc952a68d4a Possible part of DS2408 code added.
Michiel Broek <mbroek@mbse.eu>
parents: 340
diff changeset
818 piUnlock(LOCK_DEVICES);
cfc952a68d4a Possible part of DS2408 code added.
Michiel Broek <mbroek@mbse.eu>
parents: 340
diff changeset
819 #endif
cfc952a68d4a Possible part of DS2408 code added.
Michiel Broek <mbroek@mbse.eu>
parents: 340
diff changeset
820 }
cfc952a68d4a Possible part of DS2408 code added.
Michiel Broek <mbroek@mbse.eu>
parents: 340
diff changeset
821
cfc952a68d4a Possible part of DS2408 code added.
Michiel Broek <mbroek@mbse.eu>
parents: 340
diff changeset
822 fclose(fp);
cfc952a68d4a Possible part of DS2408 code added.
Michiel Broek <mbroek@mbse.eu>
parents: 340
diff changeset
823 } else {
cfc952a68d4a Possible part of DS2408 code added.
Michiel Broek <mbroek@mbse.eu>
parents: 340
diff changeset
824 if (device->present != DEVPRESENT_NO) {
cfc952a68d4a Possible part of DS2408 code added.
Michiel Broek <mbroek@mbse.eu>
parents: 340
diff changeset
825 syslog(LOG_NOTICE, "DS2408 %s is missing", device->address);
cfc952a68d4a Possible part of DS2408 code added.
Michiel Broek <mbroek@mbse.eu>
parents: 340
diff changeset
826 #ifdef HAVE_WIRINGPI_H
cfc952a68d4a Possible part of DS2408 code added.
Michiel Broek <mbroek@mbse.eu>
parents: 340
diff changeset
827 piLock(LOCK_DEVICES);
cfc952a68d4a Possible part of DS2408 code added.
Michiel Broek <mbroek@mbse.eu>
parents: 340
diff changeset
828 #endif
cfc952a68d4a Possible part of DS2408 code added.
Michiel Broek <mbroek@mbse.eu>
parents: 340
diff changeset
829 device->present = DEVPRESENT_NO;
cfc952a68d4a Possible part of DS2408 code added.
Michiel Broek <mbroek@mbse.eu>
parents: 340
diff changeset
830 #ifdef HAVE_WIRINGPI_H
cfc952a68d4a Possible part of DS2408 code added.
Michiel Broek <mbroek@mbse.eu>
parents: 340
diff changeset
831 piUnlock(LOCK_DEVICES);
cfc952a68d4a Possible part of DS2408 code added.
Michiel Broek <mbroek@mbse.eu>
parents: 340
diff changeset
832 #endif
cfc952a68d4a Possible part of DS2408 code added.
Michiel Broek <mbroek@mbse.eu>
parents: 340
diff changeset
833 }
cfc952a68d4a Possible part of DS2408 code added.
Michiel Broek <mbroek@mbse.eu>
parents: 340
diff changeset
834 }
cfc952a68d4a Possible part of DS2408 code added.
Michiel Broek <mbroek@mbse.eu>
parents: 340
diff changeset
835 free(addr);
cfc952a68d4a Possible part of DS2408 code added.
Michiel Broek <mbroek@mbse.eu>
parents: 340
diff changeset
836 addr = NULL;
164
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
837 }
342
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
838 /*
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
839 * DS2413 Dual channel addressable switch
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
840 */
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
841 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
842 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
843 addr = xstrcat(addr, device->address);
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
844 addr = xstrcat(addr, (char *)"/state");
347
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
845
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
846 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
847 if (device->present != DEVPRESENT_YES) {
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
848 syslog(LOG_NOTICE, "DS2413 %s is back", device->address);
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
849 #ifdef HAVE_WIRINGPI_H
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
850 piLock(LOCK_DEVICES);
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
851 #endif
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
852 device->present = DEVPRESENT_YES;
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
853 #ifdef HAVE_WIRINGPI_H
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
854 piUnlock(LOCK_DEVICES);
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
855 #endif
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
856 }
347
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
857 if ((rc = read_w1(device->address, (char *)"state")) >= 0) {
342
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
858 #ifdef HAVE_WIRINGPI_H
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
859 piLock(LOCK_DEVICES);
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
860 #endif
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 * 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
863 */
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
864 if (device->subdevice == 0)
347
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
865 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
866 else if (device->subdevice == 1)
347
0ab5c3fd7c77 Completed DS2413 device code and driver.
Michiel Broek <mbroek@mbse.eu>
parents: 344
diff changeset
867 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
868 device->timestamp = time(NULL);
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
869 #ifdef HAVE_WIRINGPI_H
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
870 piUnlock(LOCK_DEVICES);
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
871 #endif
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
872 }
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
873 } else {
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
874 if (device->present != DEVPRESENT_NO) {
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
875 syslog(LOG_NOTICE, "DS2413 %s is missing", device->address);
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
876 #ifdef HAVE_WIRINGPI_H
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
877 piLock(LOCK_DEVICES);
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
878 #endif
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
879 device->present = DEVPRESENT_NO;
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
880 #ifdef HAVE_WIRINGPI_H
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
881 piUnlock(LOCK_DEVICES);
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
882 #endif
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
883 }
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
884 }
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
885 free(addr);
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
886 addr = NULL;
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
887 }
3bbc8f42adc0 Added device read for the DS2413 dual channel PIO
Michiel Broek <mbroek@mbse.eu>
parents: 341
diff changeset
888
164
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
889 break;
203
47e5109c7f53 Added DHT11 sensor code
Michiel Broek <mbroek@mbse.eu>
parents: 202
diff changeset
890
47e5109c7f53 Added DHT11 sensor code
Michiel Broek <mbroek@mbse.eu>
parents: 202
diff changeset
891 #ifdef HAVE_WIRINGPI_H
202
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
892 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
893 /*
392
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
894 * Make sure we don't read the sensor within 2 seconds.
220
382938c5fce2 Make sure we don't read the DHT11 within 2 seconds.
Michiel Broek <mbroek@mbse.eu>
parents: 215
diff changeset
895 */
382938c5fce2 Make sure we don't read the DHT11 within 2 seconds.
Michiel Broek <mbroek@mbse.eu>
parents: 215
diff changeset
896 now = time(NULL);
382938c5fce2 Make sure we don't read the DHT11 within 2 seconds.
Michiel Broek <mbroek@mbse.eu>
parents: 215
diff changeset
897 if ((int)(now - dht11_last) > 2) {
203
47e5109c7f53 Added DHT11 sensor code
Michiel Broek <mbroek@mbse.eu>
parents: 202
diff changeset
898 dht11_pin = device->gpiopin;
47e5109c7f53 Added DHT11 sensor code
Michiel Broek <mbroek@mbse.eu>
parents: 202
diff changeset
899 dht11Read();
220
382938c5fce2 Make sure we don't read the DHT11 within 2 seconds.
Michiel Broek <mbroek@mbse.eu>
parents: 215
diff changeset
900 dht11_last = now;
382938c5fce2 Make sure we don't read the DHT11 within 2 seconds.
Michiel Broek <mbroek@mbse.eu>
parents: 215
diff changeset
901 }
382938c5fce2 Make sure we don't read the DHT11 within 2 seconds.
Michiel Broek <mbroek@mbse.eu>
parents: 215
diff changeset
902 if (device->subdevice == 0) {
240
6bdda35b4a13 Added thread locks for device processing
Michiel Broek <mbroek@mbse.eu>
parents: 239
diff changeset
903 piLock(LOCK_DEVICES);
203
47e5109c7f53 Added DHT11 sensor code
Michiel Broek <mbroek@mbse.eu>
parents: 202
diff changeset
904 if (dht11_valid) {
47e5109c7f53 Added DHT11 sensor code
Michiel Broek <mbroek@mbse.eu>
parents: 202
diff changeset
905 device->value = dht11_temperature * 1000;
47e5109c7f53 Added DHT11 sensor code
Michiel Broek <mbroek@mbse.eu>
parents: 202
diff changeset
906 device->timestamp = time(NULL);
47e5109c7f53 Added DHT11 sensor code
Michiel Broek <mbroek@mbse.eu>
parents: 202
diff changeset
907 device->present = DEVPRESENT_YES;
47e5109c7f53 Added DHT11 sensor code
Michiel Broek <mbroek@mbse.eu>
parents: 202
diff changeset
908 } else {
47e5109c7f53 Added DHT11 sensor code
Michiel Broek <mbroek@mbse.eu>
parents: 202
diff changeset
909 device->present = DEVPRESENT_ERROR;
47e5109c7f53 Added DHT11 sensor code
Michiel Broek <mbroek@mbse.eu>
parents: 202
diff changeset
910 }
240
6bdda35b4a13 Added thread locks for device processing
Michiel Broek <mbroek@mbse.eu>
parents: 239
diff changeset
911 piUnlock(LOCK_DEVICES);
202
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
912 } else if (device->subdevice == 1) {
240
6bdda35b4a13 Added thread locks for device processing
Michiel Broek <mbroek@mbse.eu>
parents: 239
diff changeset
913 piLock(LOCK_DEVICES);
203
47e5109c7f53 Added DHT11 sensor code
Michiel Broek <mbroek@mbse.eu>
parents: 202
diff changeset
914 if (dht11_valid) {
47e5109c7f53 Added DHT11 sensor code
Michiel Broek <mbroek@mbse.eu>
parents: 202
diff changeset
915 device->value = dht11_humidity * 1000;
47e5109c7f53 Added DHT11 sensor code
Michiel Broek <mbroek@mbse.eu>
parents: 202
diff changeset
916 device->timestamp = time(NULL);
47e5109c7f53 Added DHT11 sensor code
Michiel Broek <mbroek@mbse.eu>
parents: 202
diff changeset
917 device->present = DEVPRESENT_YES;
47e5109c7f53 Added DHT11 sensor code
Michiel Broek <mbroek@mbse.eu>
parents: 202
diff changeset
918 } else {
47e5109c7f53 Added DHT11 sensor code
Michiel Broek <mbroek@mbse.eu>
parents: 202
diff changeset
919 device->present = DEVPRESENT_ERROR;
47e5109c7f53 Added DHT11 sensor code
Michiel Broek <mbroek@mbse.eu>
parents: 202
diff changeset
920 }
240
6bdda35b4a13 Added thread locks for device processing
Michiel Broek <mbroek@mbse.eu>
parents: 239
diff changeset
921 piUnlock(LOCK_DEVICES);
202
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
922 }
5d09ca728809 Code added on the wrong machine
Michiel Broek <mbroek@mbse.eu>
parents: 187
diff changeset
923 break;
392
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
924
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
925 case DEVTYPE_GPIO:
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
926 if (device->direction == DEVDIR_IN_BIN) {
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
927 piLock(LOCK_DEVICES);
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
928 device->value = digitalRead(device->gpiopin);
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
929 device->offset = 0;
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
930 device->timestamp = time(NULL);
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
931 piUnlock(LOCK_DEVICES);
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
932 }
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
933 break;
034746506c3d Fixed initialisation of new GPIO devices.
Michiel Broek <mbroek@mbse.eu>
parents: 362
diff changeset
934
203
47e5109c7f53 Added DHT11 sensor code
Michiel Broek <mbroek@mbse.eu>
parents: 202
diff changeset
935 #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
936 #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
937 case DEVTYPE_SIM:
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
938 #ifdef HAVE_WIRINGPI_H
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
939 piLock(LOCK_DEVICES);
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
940 #endif
262
d0014ccec615 Simulation of fridge cold loss to the room added for testing.
Michiel Broek <mbroek@mbse.eu>
parents: 259
diff changeset
941 if (Config.simulators) {
d0014ccec615 Simulation of fridge cold loss to the room added for testing.
Michiel Broek <mbroek@mbse.eu>
parents: 259
diff changeset
942 simulator = Config.simulators;
d0014ccec615 Simulation of fridge cold loss to the room added for testing.
Michiel Broek <mbroek@mbse.eu>
parents: 259
diff changeset
943 if (device->subdevice == 0) {
d0014ccec615 Simulation of fridge cold loss to the room added for testing.
Michiel Broek <mbroek@mbse.eu>
parents: 259
diff changeset
944 device->value = (int)(simulator->room_temperature * 1000);
d0014ccec615 Simulation of fridge cold loss to the room added for testing.
Michiel Broek <mbroek@mbse.eu>
parents: 259
diff changeset
945 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
946 } else if (device->subdevice == 1) {
d0014ccec615 Simulation of fridge cold loss to the room added for testing.
Michiel Broek <mbroek@mbse.eu>
parents: 259
diff changeset
947 device->value = (int)(simulator->air_temperature * 1000);
d0014ccec615 Simulation of fridge cold loss to the room added for testing.
Michiel Broek <mbroek@mbse.eu>
parents: 259
diff changeset
948 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
949 } else if (device->subdevice == 2) {
d0014ccec615 Simulation of fridge cold loss to the room added for testing.
Michiel Broek <mbroek@mbse.eu>
parents: 259
diff changeset
950 device->value = (int)(simulator->beer_temperature * 1000);
d0014ccec615 Simulation of fridge cold loss to the room added for testing.
Michiel Broek <mbroek@mbse.eu>
parents: 259
diff changeset
951 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
952 }
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
953 }
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
954 #ifdef HAVE_WIRINGPI_H
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
955 piUnlock(LOCK_DEVICES);
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
956 #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
957 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
958 #endif
164
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
959 default:
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
960 break;
f16def8472ba Threads partly working via new devices interface
Michiel Broek <mbroek@mbse.eu>
parents: 163
diff changeset
961 }
212
a76cbe676bf1 Code cleanup
Michiel Broek <mbroek@mbse.eu>
parents: 209
diff changeset
962
a76cbe676bf1 Code cleanup
Michiel Broek <mbroek@mbse.eu>
parents: 209
diff changeset
963 /*
a76cbe676bf1 Code cleanup
Michiel Broek <mbroek@mbse.eu>
parents: 209
diff changeset
964 * Delay a bit after procesing a device.
a76cbe676bf1 Code cleanup
Michiel Broek <mbroek@mbse.eu>
parents: 209
diff changeset
965 */
a76cbe676bf1 Code cleanup
Michiel Broek <mbroek@mbse.eu>
parents: 209
diff changeset
966 usleep(10000);
a76cbe676bf1 Code cleanup
Michiel Broek <mbroek@mbse.eu>
parents: 209
diff changeset
967 }
215
5ad534c79a22 Do not use 100% cpu on a system without devices
Michiel Broek <mbroek@mbse.eu>
parents: 213
diff changeset
968 /*
5ad534c79a22 Do not use 100% cpu on a system without devices
Michiel Broek <mbroek@mbse.eu>
parents: 213
diff changeset
969 * 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
970 */
5ad534c79a22 Do not use 100% cpu on a system without devices
Michiel Broek <mbroek@mbse.eu>
parents: 213
diff changeset
971 usleep(100000);
158
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
972 }
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
973
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
974 syslog(LOG_NOTICE, "Thread my_devices_loop stopped");
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
975 return 0;
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
976 }
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
977
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
978
f1b7e2ef90be Added device configuration
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
979

mercurial