Hallo,
da der Orange Pi Zero nur um 10,- kostet, möchte ich mir eine Überwachung von Temperatur einer Heizung und des Wasserstandes in einem Pumpenschacht basteln. Die Daten werden zu emoncms geschickt und dort dann grafisch angezeigt.
Ich habe da schon einen Raspberryl in Betrieb für eine Inselanlage und Heizungstemperaturanzeige. Das würde ich gerne erweitern.
https://emoncms.org/dashboard/view?id=35583
Kann ich da den Orange Pi Zero dazu hernehmen und könnt Ihr mich dabei vielleicht etwas unterstützen? :s
Ich habe es herausgefunden:
Ich hab Pin 7 benutzt = gpio 6
Dabei muss man die Datei boot/script.bin ändern:
http://docs.cubieboard.org/tutorials/comm…m_configuration
--declaration--in file script.bin---
[w1_para]
w1_used = 1
gpio = 6
(steht ganz am Ende)
modprobe w1-sunxi
modprobe w1-gpio
modprobe w1-therm
Der User hat mich darauf gebracht:
http://www.orangepi.org/orangepibbsen/…wthread&tid=905
Die Belegung des GPIO- Steckers ist dann unterschiedlich zum Raspberry Pi !
#!/usr/bin/perl
use strict;
use warnings;
use LWP::Simple;
# fuer Verbosity auf 1 setzen, default 0
my $DEBUG = 0;
#emoncms Write_ID start
my $emoncmsID = "3621ae53ef0e94d44d5bfbd21e8f5611";
print "my emoncmsID: =$emoncmsID \n";
my @row;
$row[1]=2;
my $index = 0;
# Dateipfad zu die Pseudo-Dateien der Temperaturmessung
my $PATH = '/sys/bus/w1/devices/w1_bus_master1/';
# hier stehen die Device-Ids drin
my $SLAVES = $PATH . 'w1_master_slaves';
my %deviceIDs; # IDs der Temperatursensoren
my %temperatures; # aktuelle Temperaturen
my $arg =''; # Kommandozeilenargument
my ($key, $ID, $value);
my $value0 = 0;
my $value1 = 0;
my $value2 = 0;
my $value3 = 0;
my $value4 = 0;
my $value5 = 0;
my $value6 = 0;
my $value7 = 0;
my $value8 = 0;
my $value9 = 0;
# Schalteingänge einstellen
system ("echo '0' > /sys/class/gpio/export");
system ("echo '1' > /sys/class/gpio/export");
system ("echo '3' > /sys/class/gpio/export");
system ("echo 'in' > /sys/class/gpio/gpio0/direction");
system ("echo 'in' > /sys/class/gpio/gpio1/direction");
system ("echo 'in' > /sys/class/gpio/gpio3/direction");
# Kommandozeilenparameter (-v fuer verbose)
if ($#ARGV >= 0) { $arg = $ARGV[0]; }
if ($arg eq '-v') { $DEBUG = 1; }
# Nachsehen, ob die Module geladen sind
# gegebenenfalls laden
check_modules();
# Ermitteln der Device-IDs
get_device_IDs();
my $timeout=1;
while ($timeout>0)
{
$ID = $deviceIDs{0};
$value0 = read_device($ID);
if ($value0 ne 'U')
{
printf ("0: ID=%s %6.2f\n", $ID, $value0);
}
if ($index > 1) {
$ID = $deviceIDs{1};
$value1 = read_device($ID);
if ($value1 ne 'U')
{
printf ("1: ID=%s %6.2f\n", $ID, $value1);
}
}
if ($index > 2) {
$ID = $deviceIDs{2};
$value2 = read_device($ID);
if ($value2 ne 'U')
{
printf ("2: ID=%s %6.2f\n", $ID, $value2);
}
}
if ($index > 3) {
$ID = $deviceIDs{3};
$value3 = read_device($ID);
if ($value3 ne 'U')
{
printf ("3: ID=%s %6.2f\n", $ID, $value3);
}
}
if ($index > 4 ){
$ID = $deviceIDs{4};
$value4 = read_device($ID);
if ($value4 ne 'U')
{
printf ("4: ID=%s %6.2f\n", $ID, $value4);
}
}
if ($index > 5) {
$ID = $deviceIDs{5};
$value5 = read_device($ID);
if ($value5 ne 'U')
{
printf ("5: ID=%s %6.2f\n", $ID, $value5);
}
}
if ($index > 6) {
$ID = $deviceIDs{6};
$value6 = read_device($ID);
if ($value6 ne 'U')
{
printf ("6: ID=%s %6.2f\n", $ID, $value6);
}
}
if ($index > 7) {
$ID = $deviceIDs{7};
$value7 = read_device($ID);
if ($value7 ne 'U')
{
printf ("7: ID=%s %6.2f\n", $ID, $value7);
}
}
if ($index > 8 ){
$ID = $deviceIDs{8};
$value8 = read_device($ID);
if ($value8 ne 'U')
{
printf ("8: ID=%s %6.2f\n", $ID, $value8);
}
}
if ($index > 9 ){
$ID = $deviceIDs{9};
$value9 = read_device($ID);
if ($value9 ne 'U')
{
printf ("9: ID=%s %6.2f\n", $ID, $value9);
}
}
# Abfrage der Schalter
$value7 = `cat /sys/class/gpio/gpio0/value`;
$value8 = `cat /sys/class/gpio/gpio1/value`;
$value9 = `cat /sys/class/gpio/gpio3/value`;
print "emoncms start \n";
if($emoncmsID ne 0){
my $emon_ua = LWP::UserAgent->new;
my $emon_url = 'https://emoncms.org/input/post.json?node=' . $row[1] . '&json={temperatur0:' . $value0 . '},{temperatur1:' . $value1 . '},{temperatur2:' . $value2 . '},{temperatur3:' . $value3 . '},{temperatur4:' . $value4 . '},{temperatur5:' . $value5 . '},{temperatur6:' . $value6 . '},{schalter1:' . $value7 . '},{schalter2:' . $value8 . '},{schalter3:' . $value9 . '}&apikey=' . $emoncmsID ;
my $emon_response = $emon_ua->get($emon_url);
print "emoncms ende \n";
print " $emon_url \n";
print "response ... $emon_response \n";
print "emoncms ende \n";
#print "$test \n";
sleep(5);
}
}
# }
exit 0;
sub check_modules
{
# Nachsehen, ob die Module geladen sind
# gegebenenfalls nachladen
my $mods;
# alle geladenen Module stehen in der Datei /proc/modules
open (DATEI, '<', '/proc/modules') or
die "Unable to open /proc/modules: $!";
$mods = join(' ',<DATEI>);
close (DATEI);
if ($mods =~ /w1_gpio/ && $mods =~ /w1_therm/)
{
# alles O.K., Module sind da
if ($DEBUG) { print "w1 modules already loaded \n"; }
}
else
{
# Nein, das Nachladen versuchen
if ($DEBUG) { print "loading w1 modules \n"; }
system("sudo modprobe w1-gpio");
system("sudo modprobe w1-therm");
}
}
sub get_device_IDs
{
# Einlesen der IDs aller am Bus vorhandenen Sensoren
# und Speichern in einem Hash
open(INFILE, '<', $SLAVES) or die("Unable to open $SLAVES: $!");
while(<INFILE>)
{
chomp;
$deviceIDs{$index} = $_;
if ($DEBUG) { print "$index: $_ \n"; }
$index++;
}
close(INFILE);
}
sub read_device #(ID)
{
# Liest die Temperaturwerte eines Sensors aus. Die ID des
# Sensors wird als Parameter uebergeben, Rueckgabewert ist
# die gemessene Temperatur.
# Liefert das Ergebnis eine falsch Pruefinfo, wie 'U' (fuer
# 'undefined') zurueckgegeben.
my $deviceID = shift;
my $filename = $PATH . $deviceID . '/w1_slave';
my $sensordata;
open (DATEI, '<', $filename) or die "Unable to open $filename: $!";
$sensordata = join(' ',<DATEI>);
close (DATEI);
if($sensordata =~ m/YES/)
{
#fix for negative temps from http://habrahabr.ru/post/163575/
$sensordata =~ /t=(\D*\d+)/i;
$sensordata = ($1/1000);
return ($sensordata);
}
else
{
if ($DEBUG) { print ("CRC Invalid for $deviceID.\n$sensordata\n"); }
return ('U');
}
}
Alles anzeigen