-
Notifications
You must be signed in to change notification settings - Fork 0
/
solaranlage_ds18b20.lua
67 lines (52 loc) · 1.81 KB
/
solaranlage_ds18b20.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
-- Autor: Markus Hahnenkamm
-- Zur privaten, nicht kommeziellen Nutzung freigegeben.
--Modulname, mit welchem Funktionen angehängt werden
local SolarDS18B20 = {}
--Einrichten des Pins
function SolarDS18B20.init(pin)
ow.setup(pin)
end
--Liest die Temperatur eines Sensors eines
--@pin Einzulesender Pin
--@address Adresse des Sensors
--@power Power-Modus für den Pin
function SolarDS18B20.readTemperature(pin,address,power)
if (address == nil) then
print("No address")
return nil
end
-- Keine CRC Prüfung der Adresse
--DS18B20
if ((address:byte(1) == 0x10) or (address:byte(1) == 0x28)) then
--Temperaturwandlung anstoßen
ow.reset(pin) --Bus Initialisieren
ow.select(pin, address) --Chip auswählen
ow.write(pin, 0x44, power) --Trigger Conversion Kommando
--Abwarten auf Wandlungsfertigstellung
timer.delay(750000) --750ms Conversion Time - Besser auf Wandlungsfertigstellung abfragen
--Ergebnis einlesen
ow.reset(pin) --Bus Initialisieren
ow.select(pin, address) --Chip auswählen
ow.write(pin,0xBE,1) --Read Scratchpad Kommando
--Einlesen
data = nil
data = string.char(ow.read(pin))
for i = 1, 8 do
data = data .. string.char(ow.read(pin))
end
--CRC Prüfung der empfangenen Daten
crc = ow.crc8(string.sub(data,1,8))
if(crc ~= data:byte(9)) then
print("CRC Failed")
print(data:byte(1,9))
print("CRC="..crc)
return nil
end
t = (data:byte(1) + data:byte(2) * 256) * 625
return t
else
print("Geraetefamilie unbekannt")
return nil
end
end
return SolarDS18B20