thermferm/devices.c

Sat, 23 Mar 2024 09:31:01 +0100

author
Michiel Broek <mbroek@mbse.eu>
date
Sat, 23 Mar 2024 09:31:01 +0100
changeset 644
07cc86900473
parent 643
586d376ab629
child 645
49eb753a958b
permissions
-rw-r--r--

Added MIGRATION document. Trying to drop usleep() call to replace by nanosleep(). Some code cleanup.

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

mercurial