Moin
Ich bin am verzweifeln und hoffe mir hilft jemand . Ich lese mit Python mein RFID leser aus und wollte gleichzeitig die Namen in Fhem
mit Uhrzeit und Datum angezeigt haben, wann wer den RFID hier gescannt hat.
#!/usr/bin/python
from sys import exit
import RPi.GPIO as GPIO
from time import sleep, clock
from funktionen import *
userdict = {53877037723976: "Christoph", 53877041643557:"Hans",} #Hier die erlaubten Nutzer eintragen
opentime = 5 # Zeit in der die Tuer geoeffnet bleibt
while True:
lcd ("Karte","einscannen") # Syntax: lcd("Zeile 1 max 16 Zeichen", "Zeile 2 max 16 Zeichen")
user = rfid()
if user in userdict:
lcd ("Guten Tag",userdict[user])
sleep(1)
lcd ("Tuer offen", "fuer "+str(opentime)+" Sek")
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(21,GPIO.OUT)
GPIO.output(21, True)
sleep (opentime)
GPIO.output(21, False)
lcd ("Tuer wieder", "verriegelt")
sleep(1)
else:
lcd("Karte nicht","erlaubt!")
continue
GPIO.cleanup()
Mein wunsch wäre es das sobald jemand den Chip einscannt, es in Fhem angezeigt wird und bei 3 Personen zusätzlich ein Telegram aufs Handy.
Moin,
Wenn es auf der gleichen Maschine läuft -> Shell Kommando aufrufen
perl /opt/fhem/fhem.pl 7072 'FHEM Befehl'
So wie hier in etwa:
https://forum.fhem.de/index.php?topic=74127.0
Gruß Otto
Bekomme dann sowas zurück :
pi@pi:~/Desktop $ python rfid_door.py
Traceback (most recent call last):
File "rfid_door.py", line 5, in <module>
from funktionen import *
File "/home/pi/Desktop/funktionen.py", line 132
subprocess.call(['perl', '/opt/fhem/fhem.pl', '7072', 'set Erkennung <reading> <user'])
^
IndentationError: unindent does not match any outer indentation level
Hab da leider auch echt null Plan von leider.
Das steht bei Dir wirklich so drin? :o
set Erkennung <reading> <user
Hast Du Dir den Anhang in #1 von Jörg angeschaut? Dort ist das doch ziemlich im Detail codiert.
Gruß Otto
Ich kann da viel raus lesen, nur an der umsetzung scheitert es dann leider......
Das sind für mich Römische Dörfer leider. Ich verstehe einfach nicht, was ich da rein schreiben muss, damit er mir den Namen und
Tag und Uhrzeit in ein log bekomme
Hi,
Komisch, wenn ich einfach diesen Zweizeiler in Python aufrufe
import subprocess
subprocess.call(['perl', '/opt/fhem/fhem.pl', '7072', 'setreading wert Text_wert {(my $a=5;;my $b=$a*3;;return $b)}'])
schreibt er mir ein 15 in das reading Text_wert im Dummy wert.
Das ist exakt der gleiche FHEM Befehl, den ich im Browser eingebe.
Du hast Dir den Anhang(googlecontacs.py) von Jörg in Antwort #1 angeschaut und kommst damit nicht klar?
Sorry, aber warum machst Du dann Python?
Gruß Otto
Ich hatte so ein ähnliches Problem. Bei mir wird per RFID eine Karte erkannt. Das schicke ich per MQTT zu FHEM. Das MQTT-Device ruft dann per notify eine Routine von mir auf.
Dort habe ich in einem Array hinterlegt, welche Karte zu wem gehört und kann das nun gescheit prüfen und damit machen was ich will.
##############################################################################
# RFID Card-Event
#
sub RFID_CheckCard($$)
{
my ($name, $event) = @_;
# Den Prefix "Card: ", kommt vom ESP per MQTT, erkennen, dann handelt es sich um eine gesendete Karten-ID
if(index($event, 'Card: ') == 0)
{
my $cardID = substr $event, 6;
my $validCardFound = 0;
# Liste der erlaubten Karten (ID, Inhaber)
my @allowedCards =
(
["12345678", "Hans"],
["87654321", "Willli"],
);
# Array der erlaubten Karten durchlaufen
for(my $row = 0; $row < scalar @allowedCards; $row++)
{
my @cardData = $allowedCards[$row];
if($cardID eq $cardData[0][0])
{
Debug("Erlaubte Karte $cardID von $cardData[0][1]";
$validCardFound = 1;
last;
}
}
if($validCardFound eq 0)
{
Debug("Nicht erlaubte Karte $cardID entdeckt");
}
}
elsif(index($event, 'transmission-state: ') == -1)
{
# Alles andere protokollieren
debug("$name: $event");
}
}