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