FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Tiefflieger am 03 April 2018, 08:08:45

Titel: Ratlos.... RFID Code bzw Name in Fhem loggen
Beitrag von: Tiefflieger am 03 April 2018, 08:08:45
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.
Titel: Antw:Ratlos.... RFID Code bzw Name in Fhem loggen
Beitrag von: Otto123 am 03 April 2018, 09:12:45
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
Titel: Antw:Ratlos.... RFID Code bzw Name in Fhem loggen
Beitrag von: Tiefflieger am 03 April 2018, 22:47:22
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.
Titel: Antw:Ratlos.... RFID Code bzw Name in Fhem loggen
Beitrag von: Otto123 am 03 April 2018, 22:58:14
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
Titel: Antw:Ratlos.... RFID Code bzw Name in Fhem loggen
Beitrag von: Tiefflieger am 05 April 2018, 11:53:38
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
Titel: Antw:Ratlos.... RFID Code bzw Name in Fhem loggen
Beitrag von: Otto123 am 05 April 2018, 13:09:40
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
Titel: Antw:Ratlos.... RFID Code bzw Name in Fhem loggen
Beitrag von: meikelS am 05 April 2018, 21:07:44
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");
  }
}