Während der Eingabe kein speichern in fhem.cfg möglich, nach Neustart can't open

Begonnen von Tecra8000, 16 Februar 2017, 20:21:00

Vorheriges Thema - Nächstes Thema

Tecra8000

Hallo Thorsten,

ich möchte jetzt erst einmal keine optionale Hardware einsetzen.

Es scheint nicht so einfach zu sein die Dhts in Fhem einzubinden. Die Lösungen die ich immer wieder gefunden habe war immer die mit dem Conjob und export in die Fhem Variablen.
Am Besten finde ich das direkte lesen der Sensoren aus Fhem, das wäre für mich eine sauber Lösung
Perl kann ich leider noch nicht.

Ich eiere schon lange mit diesen Sensoren rum.....

LG
Frank




Thorsten Pferdekaemper

Zitat von: Tecra8000 am 19 Februar 2017, 22:02:20
Es scheint nicht so einfach zu sein die Dhts in Fhem einzubinden. Die Lösungen die ich immer wieder gefunden habe war immer die mit dem Conjob und export in die Fhem Variablen.
Am Besten finde ich das direkte lesen der Sensoren aus Fhem, das wäre für mich eine sauber Lösung
Perl kann ich leider noch nicht.
Na dann versuch doch einfach mal das Ding nicht per cron, sondern per at zu starten.

define blabla at +*00:59:00 "/usr/local/sbin/fhem-dht"

...oder so ähnlich. Womöglich gibt es aber ein Problem, weil fhem vielleicht nicht gleichzeitig auf den Befehl warten kann und auf eine Telnet-Verbindung antworten.
Stell doch mal das Coding des Skripts hier rein.
Gruß,
   Thorsten
FUIP

Tecra8000

Hallo Thorsten,

hier mal das Sript, das den DHT11 ausliest und in Fhem schreibt.

Schön wäre es wenn ich diesen Code direkt in Fhem /Perl laufen lassen könnte.


PS: Seit der Deaktivierung dieses Scriptes laufen beide Pi wieder stabil, das heißt Sie sind über die Weboberfläche erreichbar.


Eine Frage habe ich noch zum Befehl Dashboard:

Ich möchte 4 Spalten neben einander, das ist kein Problem, aber darunter möchte ich eine Spalte über diese 4 Spalten, das hat noch nicht geklappt.
Das Fhem_Tablet_Ui finde ich für diese kleine Aufgabe zu mächtig.



#!/usr/bin/python

import Adafruit_DHT
import socket

### CONFIG ###
# fhem's telnet port
host = 'localhost'
port = 7072

sensors = [
    {
        'name': 'Innen.DHT11',
        'type': Adafruit_DHT.DHT11,
        'pin':  26
    },
    {
        'name': 'Aussen.DHT11',
        'type': Adafruit_DHT.DHT11,
        'pin':  26
    },
]

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


## config reference:
# sensors = [
#     {
#         'name': 'DHT22',
#         'type': Adafruit_DHT.DHT22,
#         'pin':  4
#     },
#     {
#         'name': 'DHT11',
#         'type': Adafruit_DHT.DHT11,
#         'pin':  4
#     },
#     {
#         'name': 'AM2302',
#         'type': Adafruit_DHT.AM2302,
#         'pin':  4
#     },
# ]





Vielen Dank und viele Grüße
Frank

Thorsten Pferdekaemper

Zitat von: Tecra8000 am 20 Februar 2017, 19:01:53
hier mal das Sript, das den DHT11 ausliest und in Fhem schreibt.
Das ist aber bestimmt nicht alles. Schau da nochmal nach.

Zitat
Eine Frage habe ich noch zum Befehl Dashboard:
Total off-topic hier. Mach am besten einen neuen Thread auf.

Gruß,
   Thorsten
FUIP

Tecra8000

Oh ja, hat mit der Zwichenablage nicht funktioniert......

#!/usr/bin/python

import Adafruit_DHT
import socket

### CONFIG ###
# fhem's telnet port
host = 'localhost'
port = 7072

sensors = [
    {
        'name': 'Innen.DHT11',
        'type': Adafruit_DHT.DHT11,
        'pin':  26
    },
    {
        'name': 'Aussen.DHT11',
        'type': Adafruit_DHT.DHT11,
        'pin':  26
    },
]

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


## config reference:
# sensors = [
#     {
#         'name': 'DHT22',
#         'type': Adafruit_DHT.DHT22,
#         'pin':  4
#     },
#     {
#         'name': 'DHT11',
#         'type': Adafruit_DHT.DHT11,
#         'pin':  4
#     },
#     {
#         'name': 'AM2302',
#         'type': Adafruit_DHT.AM2302,
#         'pin':  4
#     },
# ]
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)

    if humidity is not None and temperature is not None:
            s += 'setreading {0} Temperature {1:0.1f}\n'.format(sensor['name'], temperature)
            s += 'setreading {0} Humidity {1:0.1f}\n'.format(sensor['name'], humidity)
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)

    if humidity is not None and temperature is not None:
            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 0\n'.format(sensor['name'])
    else:
            s += 'setreading {0} Error 1\n'.format(sensor['name'])

s += "quit"

netcat(host, port, s)

Thorsten Pferdekaemper

Da stimmt jetzt aber auch was nicht... Kannst Du nochmal nachschauen? Ich glaube, da hat sich was verdoppelt.
FUIP

Tecra8000

Hi,

si jetzt der dritte Versuch.

Sorry....
LG
Frank
#!/usr/bin/python

import Adafruit_DHT
import socket

### CONFIG ###
# fhem's telnet port
host = 'localhost'
port = 7072

sensors = [
    {
        'name': 'Innen.DHT11',
        'type': Adafruit_DHT.DHT11,
        'pin':  26
    },
    {
        'name': 'Aussen.DHT11',
        'type': Adafruit_DHT.DHT11,
        'pin':  26
    },
]

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


## config reference:
# sensors = [
#     {
#         'name': 'DHT22',
#         'type': Adafruit_DHT.DHT22,
#         'pin':  4
#     },
#     {
#         'name': 'DHT11',
#         'type': Adafruit_DHT.DHT11,
#         'pin':  4
#     },
#     {
#         'name': 'AM2302',
#         'type': Adafruit_DHT.AM2302,
#         'pin':  4
#     },
# ]

### 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)

    if humidity is not None and temperature is not None:
            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 0\n'.format(sensor['name'])
    else:
            s += 'setreading {0} Error 1\n'.format(sensor['name'])

s += "quit"

netcat(host, port, s)


Tecra8000

Hi,

habe zu testen ins Pythonscript ein time.sleep(30) eingefügt, mal sehen wie es jetzt ausssieht.

Schön wäre natürlich die Zugriffe via Perl.

Viel mir gerade so ein.......

LG
Frank

Thorsten Pferdekaemper

Hi,
hast Du mal ausprobiert, was passiert, wenn Du das Ding einfach von einem at aus startest? Ich glaube, ich habe das schonmal vorher geschrieben.
Gruß,
   Thorsten
FUIP

Tecra8000

Hallo Thorsten,

I am so happy.....

Das funktioniert, beim Googeln habe ich immer nur meine Lösung gefunden.
Keiner hat geschrieben das es so einfach geht,     
man das war mir eine Lehre.......

Viele Dank

Sollte man das im Wiki nicht veröffendlichen....

Hatte neuen Post für "dashboard" aufgemacht, hast Du dazu auch eine Idee.

LG
FRank

Thorsten Pferdekaemper

Zitat von: Tecra8000 am 21 Februar 2017, 19:26:56
Sollte man das im Wiki nicht veröffendlichen....
Naja, die Lösung hat halt einen großen Nachteil: Ich nehme mal an, dass FHEM blockiert während der Zeit, die das Skript zur Ausführung braucht. Eine gute Lösung würde das vermeiden. Ich kenne aber momentan keinen einfach zu verwendenden Mechanismus dafür.

Zitat
Hatte neuen Post für "dashboard" aufgemacht, hast Du dazu auch eine Idee.
Ach das war für dashboard. Ich glaube, das hattest Du nicht dazugeschrieben. Nein, kenne ich nicht...
Vielleicht verschiebst Du das in den entsprechenden Forenbereich, wenn Dir hier keiner antwortet.
Gruß,
   Thorsten
FUIP

Wernieman

Da das Script unabhängig die Daten zu FHEM reinpustet, könnte man es doch im Hintergrund aufrufen können?
define blabla at +*00:59:00 "/usr/local/sbin/fhem-dht &"

Man beachte das "&" am Ende ....
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Thorsten Pferdekaemper

Zitat von: Wernieman am 22 Februar 2017, 18:19:59
Da das Script unabhängig die Daten zu FHEM reinpustet, könnte man es doch im Hintergrund aufrufen können?
define blabla at +*00:59:00 "/usr/local/sbin/fhem-dht &"
Funktioniert das wirklich? Ich habe mal gelesen, dass fhem das auf eine Art und Weise startet, dass das & verloren geht. Ich kann mich da aber auch irren. In dem Fall wäre das natürlich perfekt.
Gruß,
   Thorsten
FUIP

Wernieman

Weiß ich nicht, da nicht getestet. In dem Falle würde ich ein Script ausführen lann, was das Script ausführt ...
ala
define blabla at +*00:59:00 "/usr/local/sbin/fhem-dht-starter"

Und im /usr/local/sbin/fhem-dht-starter
#!/bin/bash
/usr/local/sbin/fhem-dht &
exit 0


Wobei für beides EIGENLICH der Ordner /usr/local/bin/ besser wäre (nach Richtlinien)
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

justme1968

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968