Daten von RPI 1 zu RPI 2 (FHEM) senden

Begonnen von Steffen@Home, 15 Dezember 2016, 11:43:50

Vorheriges Thema - Nächstes Thema

Steffen@Home

Hallo Miteinander,

ich würde gerne die Temperatur-Werte (DHT 22) die auf meinem Raspberry #1 per Adafruit abgegriffen werden sollen zum
Raspberry #2, auf dem FHEM läuft übergeben.

Die beiden Pi´s sind mit dem gleichen Netzwerk verbunden.

Was gibt es da für Möglichkeiten die Euch einfallen?

Vielen Dank!

Pi 1 - FHEM, HM-MOD-RPI-PCB, HM-RT-CC-DN, HM-WDS10-TH-O, HM-Sec-SCo, HM-LC-Sw1PBU-FM, Relais Platine für ext. Ansteuerung, LD382 Wifi LED Controller, DHT
Pi 2 - Kamera, DHT
Pi 3 - FHEM2, Grafana, DHT, Magnet-Sensoren, Relais-Platine

genius30mc

Schau mal  http://www.netzmafia.de/skripten/inetprog/inetprog2.html  an

habs ausprobiert, tut !

für my $remote_host = "192.168.178.38";   must die die IP adresse von dem PI eingeben auf dem du das server program gestarted hast.
RaspberryPI A und B
A für  Viesmann Heizung
B für 3xFHT80B

Steffen@Home

Hallo Genius,
danke, aber da komm ich vermutlich nicht ganz klar damit, da bin ich zu wenig experte dafür.  :o
Pi 1 - FHEM, HM-MOD-RPI-PCB, HM-RT-CC-DN, HM-WDS10-TH-O, HM-Sec-SCo, HM-LC-Sw1PBU-FM, Relais Platine für ext. Ansteuerung, LD382 Wifi LED Controller, DHT
Pi 2 - Kamera, DHT
Pi 3 - FHEM2, Grafana, DHT, Magnet-Sensoren, Relais-Platine

abc2006

rufe vom Raspberry 1 per SSH auf dem Raspberry 2 fhem.pl mit dem entsprechenden Befehl auf:

rpi1: ssh pi@rpi2 "/home/pi/fhemtemp Temperatursensor1 22"

rpi2:
fhem:
define Temperatursensor1 dummy
attr Temperatursensor1 comment Das ist der erste Temperatursensor, der vom ADAFRUIT übermittelt werden soll


/home/pi/fhemtemp:

#!/bin/bash
/opt/fhem/fhem.pl 7072 set $1 $2

chmod 700 /home/pi/fhemtemp
chown pi:pi /home/pi/fhemtemp

Habe ich bei mir im Einsatz, funktioniert einwandfrei. Tippfehler oder Gedächtnislücken nicht ausgeschlossen, wenns nicht klappt, gerne nochmal melden.


Wie du den Wert auf dem rpi1 ausliest, kann ich dir allerdings leider nicht helfen.

Achja: andere alternative: FHEM2FHEM ;-)



Grüße
Stephan
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

chris1284

ich würde die temp direkt in einen dummy in fhem per telnet schreiben.
oder rfhem nutzen fall sdu auf dem 1. pi fhem installieren willst/kannst und dort mit fhem die temp schon abgreifen

Steffen@Home

Guten Morgen Chris & Stephan, danke auch für eure Antworten!

Ich möchte die Temp. Werte wie bereits auf meinem FHEM-Pi per Adafruit auslesen.

-> Wenn ich diese Werte, wie Chris beschreibt, per SSH-Befehl in meinem Script direkt auf den Dummy auf meinem anderen Pi (FHEM) senden könnte wäre das perfekt.


Könnte dann der Befehl so aussehen?

ssh pi@192.168.1.123 perl /opt/fhem/fhem.pl 7072  "'set mytempdummy' $Wert"
Pi 1 - FHEM, HM-MOD-RPI-PCB, HM-RT-CC-DN, HM-WDS10-TH-O, HM-Sec-SCo, HM-LC-Sw1PBU-FM, Relais Platine für ext. Ansteuerung, LD382 Wifi LED Controller, DHT
Pi 2 - Kamera, DHT
Pi 3 - FHEM2, Grafana, DHT, Magnet-Sensoren, Relais-Platine

chris1284

ich mache das per perl script (nur das ich statt einen entfernten den lokalen fhem-server anspreche). Müsstest du auf pi 2 halt perl installieren wenn nicht vorhanden.
ich weiss nicht wie "adafruit" die daten bereitstellt, wie du sie ins script bekommst kann ich dir nicht sagen. ich hänge dir aber mal ein beispiel an.

use IO::Socket::INET;
my $Wert = ---> 'keine ahnung wie man die werte aus adafruit bekommt' ;

my $HOSTNAME = "192.168.1.123";
my $HOSTPORT = "7072";
my $socket = IO::Socket::INET->new('PeerAddr' => $HOSTNAME,'PeerPort' => $HOSTPORT,'Proto' => 'tcp') ;
print $socket "setreading mytempdummy temprature".$Wert."\n";
$socket->close;


rein vom pinzip brauchts auch kein ssh sondern einfach

telnet 192.168.1.123 7072
set mytempdummy' $Wert
exit

beispiele für telnet shellscripte gibs genug im netz. egal welche variante (perl, shellscript) würde ich dann per cronjob regelmäßig laufen lassen.


ps: was meinst du mit adafruit? für mich ist das der name einer firma aber nicht direkt ein programm

Steffen@Home

Hallo Chris,

ok danke. Versuche das jetzt mal zu verstehen.

Also entweder per PERL Script z.B.  sendTempValues.pl:

use IO::Socket::INET;
my $Wert = ---> 'keine ahnung wie man die werte aus adafruit bekommt' ;

my $HOSTNAME = "192.168.1.123";
my $HOSTPORT = "7072";
my $socket = IO::Socket::INET->new('PeerAddr' => $HOSTNAME,'PeerPort' => $HOSTPORT,'Proto' => 'tcp') ;
print $socket "setreading mytempdummy temperature".$Wert."\n";
$socket->close;


oder

per shellscript und telnet z.b. sendTempValues.sh

#!/bin/sh
host=192.168.1.123
port=7072
#optional login=steve
#optional passwd=hellothere
cmd="set mytempdummy $Wert" #das ' habe ich aus deinem Text entfernt da vermutlich versehentlich

echo open ${host} ${port}
sleep 1
#echo ${login}
#sleep 1
#echo ${passwd}
#sleep 1
echo ${cmd}
sleep 1
echo exit




Mit Adafruit meinte ich die Python library um den DHT auszulesen.
https://github.com/adafruit/Adafruit_Python_DHT
Pi 1 - FHEM, HM-MOD-RPI-PCB, HM-RT-CC-DN, HM-WDS10-TH-O, HM-Sec-SCo, HM-LC-Sw1PBU-FM, Relais Platine für ext. Ansteuerung, LD382 Wifi LED Controller, DHT
Pi 2 - Kamera, DHT
Pi 3 - FHEM2, Grafana, DHT, Magnet-Sensoren, Relais-Platine

chris1284

phython hat auch eine telnetlib. evtlkannst du das in dem script mit einbauen so das es nach dem temp lesen gleich alles an fhem per telnet sendet

Steffen@Home

Hallo Chris,

habe nochmal in das Script des bestehenden DHT direkt am Fhem RPi geschaut.

Das ist doch ein bash-Script das ein Python-Script AdafruitDHT aufruft.

#!/bin/bash
sudo killall -q loldht > /dev/null 2>&1
cd /home/pi/Adafruit_Python_DHT

WERTE=$(sudo /home/pi/Adafruit_Python_DHT/examples/AdafruitDHT.py 2302 10 | grep "Humidity")
HUM=$(echo $WERTE|cut -d "=" -f3|cut -d "%" -f1)
Temp=$(echo $WERTE|cut -d "=" -f2|cut -d "*" -f1)
#echo $WERTE
#echo $HUM
#echo $Temp
/opt/fhem/fhem.pl 7072 "setreading WZTemp temperature $Temp"
/opt/fhem/fhem.pl 7072 "setreading WZTemp humidity $HUM"
Pi 1 - FHEM, HM-MOD-RPI-PCB, HM-RT-CC-DN, HM-WDS10-TH-O, HM-Sec-SCo, HM-LC-Sw1PBU-FM, Relais Platine für ext. Ansteuerung, LD382 Wifi LED Controller, DHT
Pi 2 - Kamera, DHT
Pi 3 - FHEM2, Grafana, DHT, Magnet-Sensoren, Relais-Platine

Steffen@Home

so..habe jetzt mal was zusammen getippt das ich dann sobald die Hardware Einsatzbereit ist testen möchte.

Vielleicht könnt ihr mal drüber linsen  :D Danke!

Mein Script zum Auslesen der Temp. Werte für den neuen Rpi wird folgendermaßen angepasst:


#!/bin/bash
IPFHEM=192.168.1.123
Port=7072
sudo killall -q loldht > /dev/null 2>&1
cd /home/pi/Adafruit_Python_DHT

WERTE=$(sudo /home/pi/Adafruit_Python_DHT/examples/AdafruitDHT.py 11 10 | grep "Humidity")
HUM=$(echo $WERTE|cut -d "=" -f3|cut -d "%" -f1)
Temp=$(echo $WERTE|cut -d "=" -f2|cut -d "*" -f1)
#echo $WERTE
#echo $HUM
#echo $Temp

./telnetTempToFHEM.sh $Temp $HUM $IPFHEM $Port



Script zum Werte senden an FHEM-Server: telnetTempToFHEM.sh

#!/bin/sh
#send temp values from DHT to FHEM Server Dummy variable
#script is called from /usr/local/sbin/fhem-DHTAdafruit
#btw from /etc/cron.d/fhem-dht
#send by telnet to FHEM Server
#$1=temperature, $2=Humidity, $3=IP-FHEM, $4=Port

temp=$1
hum=$2
host=$3 #192.168.1.123
port=$4 #7072

#optional login=user
#optional passwd=password

cmd1="set Ga2Temp $temp"
cmd2="set Ga1HUM $hum"

echo open ${host} ${port}
sleep 1
#echo ${login}
#sleep 1
#echo ${passwd}
#sleep 1
echo ${cmd1}
sleep 1
echo ${cmd2}
sleep 1
echo exit


Pi 1 - FHEM, HM-MOD-RPI-PCB, HM-RT-CC-DN, HM-WDS10-TH-O, HM-Sec-SCo, HM-LC-Sw1PBU-FM, Relais Platine für ext. Ansteuerung, LD382 Wifi LED Controller, DHT
Pi 2 - Kamera, DHT
Pi 3 - FHEM2, Grafana, DHT, Magnet-Sensoren, Relais-Platine

Steffen@Home

Guten Abend,

die Hardware funktioniert jetzt.

Leider klappt die Weitergabe an den FHEM-Server nicht.
Die beiden dummys GaOstTemp & GaOstHum habe ich angelegt.

set GaOst... oder setreading GaOst.. funktionieren beide nicht.
Kann es sein dass in den Befehl noch irgendwie das /opt/fhem/fhem.pl mit rein muss?
Über eine Idee würde ich mich freuen...

pi@raspberrypi:~ $ ./fhem-DHTAdafruit
36.8
23.8
open 192.168.1.123 7072
setreading GaOstTemp 23.8
setreading GaOstHum 36.8
exit
pi@raspberrypi:~ $
Pi 1 - FHEM, HM-MOD-RPI-PCB, HM-RT-CC-DN, HM-WDS10-TH-O, HM-Sec-SCo, HM-LC-Sw1PBU-FM, Relais Platine für ext. Ansteuerung, LD382 Wifi LED Controller, DHT
Pi 2 - Kamera, DHT
Pi 3 - FHEM2, Grafana, DHT, Magnet-Sensoren, Relais-Platine

chris1284

nein, dein code ist falsch da die syntax

setreading <name des gerätes in fhem> <name des readings> <wert> ist


setreading GaOstTemp temprature 23.8
setreading GaOstHum humidity 36.8

Steffen@Home

Hallo Chris,

das setreading habe ich auch schon versucht, aber erfolglos. Auch mit "set GaOstTemp $temp" funktioniert es nicht.

Irgendwo muss ich noch nen Bock drin haben.
Im Logfile taucht leider auch keine Zeile auf anhand deren man etwas in Erfahrung bringen könnte.

Für den Dummy GaOstTemp habe ich folgendes userReading angelegt:

temperature { ReadingsVal("GaOstTemp","state","");; }, humidity { ReadingsVal("GaOstHum","state","");; }


GaOstHum userReading:
humidity { ReadingsVal("GaOstHum","state","");; }

pi@raspberrypi:~ $ ./fhem-DHTAdafruit
open 192.168.1.123 7072
setreading GaOstTemp temperature 23.0
setreading GaOstHum humidity 33.0
exit
pi@raspberrypi:~ $
Pi 1 - FHEM, HM-MOD-RPI-PCB, HM-RT-CC-DN, HM-WDS10-TH-O, HM-Sec-SCo, HM-LC-Sw1PBU-FM, Relais Platine für ext. Ansteuerung, LD382 Wifi LED Controller, DHT
Pi 2 - Kamera, DHT
Pi 3 - FHEM2, Grafana, DHT, Magnet-Sensoren, Relais-Platine

chris1284

gibt doch einfach mal oben in fhem-befehlsfenster den befehl ein. mach auch mal ein list von dem dummy den du angelegt hast

setreading GaOst temperature 23.0
setreading GaOst humidity 33.0

danach sollten in deinem dummy mit namen "GaOst" (oder wie immer du ihn genannt hast) 2 neue readings mit den werten auftauchen