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 Chris, danke.

Das habe ich schon gemacht.
Mit setreading GaOstTemp temperature 99 ist das reading temperature mit dem Wert 99 aufgetaucht, wird aber ja dann von state überschrieben wegen des codes.
Mit setreading GaOstTemp state 99 wird sowohl state und auch folglich temperature gesetzt.

Ich habe irgendwie das Gefühl dass der telnet Befehl nicht ankommt.


Internals:
   NAME       GaOstTemp
   NR         78
   STATE      99
   TYPE       dummy
   Readings:
     2016-12-28 09:59:58   humidity
     2016-12-28 09:59:58   state           99
     2016-12-28 09:59:58   temperature     99
Attributes:
   alias      Garage Ost Temperatur
   icon       status_frost
   room       GarageOst
   userReadings temperature { ReadingsVal("GaOstTemp","state","");; }, humidity { ReadingsVal("GaOstHum","state","");; }
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

ThomasTM

Hallo Steffen,
hatte dieser Tage auch die Frage wie die Daten von a nach b schaffen.

den Vorschlag mit Perl gab es ja schon, hier ein Ansatz mit Py.

So schaut es nun bei mir aus, vielleicht hilft es dir:


#!/usr/bin/python
# -*- coding: utf-8 -*-
#
# call it with crontab

import Adafruit_DHT
import socket

### CONFIG ###
# fhem's telnet port
#host = 'localhost'
host = '192.168.1.xx'
port = 7072

sensors = [
    {
        'name': 'DHT11.Bibliothek',
        'type': Adafruit_DHT.DHT11,
        'pin':  17
    },
]

# retry in case of error
retries = 15
delay = 2

### END CONFIG ###

def netcat(hostname, port, content):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((hostname, port))
    s.sendall(content)
    s.shutdown(socket.SHUT_WR)
    while 1:
        data = s.recv(1024)
        if data == "":
            break
    if data:
        print "Received:", repr(data)
    s.close()

# empty netcat string
s = "";

for sensor in sensors:
    humidity, temperature = Adafruit_DHT.read_retry(sensor['type'], sensor['pin'], retries, delay)

     # check if the values are not empty and if the humidity is not bigger than 100%
    if humidity is not None and humidity < 100 and temperature is not None:
            error = 0
            s += 'setreading {0} temperature {1:0.1f}\n'.format(sensor['name'], temperature)
            s += 'setreading {0} humidity {1:0.1f}\n'.format(sensor['name'], humidity)
            s += 'setreading {0} error {1}\n'.format(sensor['name'], error)
    else:
            error = 1
            s += 'setreading {0} error {1}\n'.format(sensor['name'], error)

s += "quit"

netcat(host, port, s)

mfg
thomas

Steffen@Home

Hallo Thomas, Danke für die Info.

Eigentlich habe ich ja schon alles fertig nur dass der Telnet Befehl nicht ankommt. Vermute ich zumindest.
Leider hab ich keine Idee wie ich weiter vorgehen könnte um das abzuprüfen.
Vielleicht hat ja Chris noch eine Idee  ;)
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

#18
probier mal hinter deinem echo immer ein enter mit einzubauen sonst meine ich wird die verbinfung nur aufgemacht, text geschrieben, verbindung zugemacht ohne durch enter den text auch zu senden.
in meinem perl script siehst du nach jedem befehl ein "."\n";" für den zeilenumbruch. was das im shellscript ist kann ich so nicht sagen, müsste ich auch erst suchen

pi@raspberrypi:~ $ ./fhem-DHTAdafruit
36.8
23.8
open 192.168.1.123 7072
setreading GaOstTemp 23.8
--> enter / eingabe
setreading GaOstHum 36.8
--->enter /eingabe
exit
pi@raspberrypi:~ $

Steffen@Home

Hallo Chris,

ich habe es zwar hinbekommen dass er jetzt eine neue Zeile macht aber das ändert leider auch nichts daran dass es funktionier.  :o

cmd1="set GaOstTemp $temp\\n"


echo open ${host} ${port} -e


pi@raspberrypi:~ $ ./fhem-DHTAdafruit
open 192.168.1.123 7072 -e
set GaOstTemp 23.9

set GaOstHum 36.4

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

Steffen@Home

Habe gerade etwas im Netz gefunden und damit hat er mir den Wert 88 geschrieben. Habe aber keine Ahnung warum das damit ging  ;D
Aber zumindest funktioniert irgendeine Verbindung und der Wert kann auch mit dem Befehl gesetzt werden.

cat > /dev/tcp/192.168.1.123/7072
set GaOstTemp 88
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

Leider funktioniert der Befehl nicht in meinem Script was mir also nicht weiter hilft  >:(
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 habe jetzt mal nach beispielen gesucht, die sehen irgendwie anderst aus als das was du da hast zb:

Zitat
#!/bin/bash
(
echo "password";
sleep 1;
echo -e "Befehl\r";
sleep 3;
echo -e "exit\r"
) | telnet 192.168.xxx.xx

bau das doch für dich mal um

Zitat
#!/bin/bash
(
echo -e "setreading GaOstTemp 23.8\r";
sleep 3;
echo -e "exit\r"
) | telnet 192.168.1.123 7072

Steffen@Home

Super, so gehts!  ;D Danke Dir recht Herzlich!
Das mit dem "Escape character" hab ich noch nicht hinbekommen.
Echo -e hat er auch gemeckert und ohne funktioniert es.

Was mich jetzt noch stört ist dass der dewpoint und die abs.Feuchte nicht automatisch berechnet werden wie an meinem anderen Sensor.

state Format:
<span style="color:green">Temperatur: temperature °C </span><br><span style="color:blue"> Feuchtigkeit: humidity %</span><br> Taupunkt: dewpoint °C<br>Abs. Feuchte: absFeuchte g/m3
In Everything liegt ein dew_all aber ich verstehe den Zusammenhang noch nicht warum es beim einen Sensor geht und beim neuen nicht. Die Readings usw. sind identisch.

Internals:
   CMD_TYPE   dewpoint
   DEF        dewpoint .* temperature humidity dewpoint
   DEV_REGEXP .*
   HUM_NAME   humidity
   NAME       dew_all
   NEW_NAME   dewpoint
   NR         38
   NTFY_ORDER 10-dew_all
   STATE      active
   TEMP_NAME  temperature
   TYPE       dewpoint
Attributes:
   absFeuchte 1
   room       hidden


Die Lösung des Telnet Problems:

cmd1="setreading GaOstTemp temperature $temp\r"


echo ${cmd1};
sleep $sleep;
echo ${cmd2};
sleep $sleep;
#echo -e "exit\r"
echo "^]";
) | telnet ${host} ${port}


Ausgabe:
pi@raspberrypi:~ $ ./fhem-DHTAdafruit
Trying 192.168.1.123...
Connected to 192.168.1.123.
Escape character is '^]'.
Connection closed by foreign host.
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

Verstehe das nicht, ich bekomme es einfach nicht hin  ???

mit der 1. Zeilen in der config müsste doch für jedes Device das "temperature" & "humidity" in den readings hat automatisch ein neues reading "dewpoint" erzeugt werden oder?

define dew_all dewpoint dewpoint .* temperature humidity dewpoint
attr dew_all absFeuchte 1
attr dew_all room hidden


Bei dem Device WZTemp funktioniert es:
define WZTemp dummy
attr WZTemp alias Wohnen DHT11
alt: CurrentTemperature=temperature,minValue=-30
attr WZTemp group Dash_temp
attr WZTemp homebridgeMapping CurrentTemperature=temperature,CurrentRelativeHumidity=humidity
attr WZTemp icon temp_inside
attr WZTemp room Homekit,Wohnen
attr WZTemp sortby 02
attr WZTemp stateFormat <span style="color:green">Temperatur: temperature °C </span><br><span style="color:blue"> Feuchtigkeit: humidity %</span><br> Taupunkt: dewpoint °C<br>Abs. Feuchte: absFeuchte g/m3


Beim neuen GaOstTemp nicht?
temperature und humidity habe ich doch mit setreading erhalten....

define GaOstTemp dummy
attr GaOstTemp alias Garage Ost Temperatur
attr GaOstTemp group Dash_temp
attr GaOstTemp homebridgeMapping CurrentTemperature=temperature,CurrentRelativeHumidity=humidity
attr GaOstTemp icon hue_room_carport
attr GaOstTemp room GarageOst,Homekit
attr GaOstTemp stateFormat <span style="color:green">Temperatur: temperature °C </span><br><span style="color:blue"> Feuchtigkeit: humidity %</span><br> Taupunkt: dewpoint °C<br>Abs. Feuchte: absFeuchte g/m3



Internals:
   NAME       GaOstTemp
   NR         77
   STATE      <span style="color:green">Temperatur: 24.2 °C </span><br><span style="color:blue"> Feuchtigkeit: 37.0 %</span><br> Taupunkt: dewpoint °C<br>Abs. Feuchte: absFeuchte g/m3
   TYPE       dummy
   Readings:
     2016-12-29 23:00:08   humidity        37.0
     2016-12-29 19:23:03   state           24.3
     2016-12-29 23:00:05   temperature     24.2
Attributes:
   alias      Garage Ost Temperatur
   group      Dash_temp
   homebridgeMapping CurrentTemperature=temperature,CurrentRelativeHumidity=humidity
   icon       hue_room_carport
   room       GarageOst,Homekit
   stateFormat <span style="color:green">Temperatur: temperature °C </span><br><span style="color:blue"> Feuchtigkeit: humidity %</span><br> Taupunkt: dewpoint °C<br>Abs. Feuchte: absFeuchte g/m3
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

Habe jetzt für das Device folgendes eingefügt und damit funktioniert es zumindest.
userReadings
dew:temperature.* {urDewpoint($name)}
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

#26
komischerweise Funktioniert jetzt auf einmal die automatische dewpoint Berechnung und deren Reading Erstellung  ::)

War wohl zu voreilig  :o

War wohl nur sporadisch, kam nur 4 mal  ;)

2016-12-31_03:10:31
2016-12-31_07:30:16
2016-12-31_16:40:08
2016-12-31_19:05:13

dann kam der Silvesterknall  ;D
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

Mahlzeit  :)

Kann es sein dass das Modul dewpoint mit dummy's Probleme hat?
Habe vor paar Tagen einen Außentemperatur Fühler(HM-WDS10-TH-O) angelernt und schwups ist automatisch der dewpoint da.

Allerdings habe ich ja einen weiteren DHT (WZTemp)als dummy bei dem es ja funktioniert  ::)

Vlt. sollte ich den dummy GaOst auch mal komplett mit FileLog(das aber schon neu ist) und allem löschen und neu anlegen da ja der SVG auch Probleme macht https://forum.fhem.de/index.php/topic,63690.0.html
Vielleicht stimmt Grundsätzlich etwas nicht mit dem dummy. Bin ratlos.
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

Heute Nacht kam wieder so eine sporadische Dewpoint Berechnung  ???
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

Hallo Zusammen,

kann es sein dass mein Befehl:

cmd1="setreading GaOstTemp temperature $temp\r"

Probleme macht und ich stattdessen nur set verwenden sollte?

Aber direkt ein set auf das Reading "temperature" wird nicht funktionieren soweit ich das verstehe.
cmd1="set GaOstTemp temperature $temp\r"

Dann müsste ich die Werte wohl doch auf 2 Dummys aufteilen aber das wäre etwas unschön ::)
cmd1="set GaOstTemp $temp\r"
cmd1="set GaOstHum $hum\r"


Verstehe vlt. den genauen Unterschied/Zweck zwischen den Beiden Befehlen noch nicht  ???
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