Mit QR Code ein Event auslösen oder Befehl absetzen

Begonnen von TomLee, 08 November 2022, 11:28:57

Vorheriges Thema - Nächstes Thema

TomLee

Der ESP32 ist schon da und ich hab noch nicht wirklich ein QR-Code-Reader Projekt ausgemacht ...

betateilchen

Warum muss ich die ganze Zeit an "Fuhr multitronic 881" denken?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

TomLee

Zitat... oder nur für ein paar Mal Handwerker

Es gibt genau sechs User hier im Forum, die in Frage kommen, das du das so formulierst, schliesse mindestens drei, eher vier, aus.
Mich fuchsts mit wem du Kontakt hast ?

Otto123

Zitat von: TomLee am 10 November 2022, 17:38:03
Der ESP32 ist schon da und ich hab noch nicht wirklich ein QR-Code-Reader Projekt ausgemacht ...
Ich habe mir gestern das angeschaut. Das ist aber wenig überzeugend https://www.youtube.com/watch?v=tDk3hqSfmGw
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

TomLee

Wegen dem wenig überzeugend frag ich ja, danke aber das dir überhaupt Gedanken darüber gemacht / damit beschäftigt hast.

Otto123

Mein Modul ist heute auch gekommen  8)  aber hatte noch keine Zeit.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

tomster

In diesem Projekt wird ESP32Cam nur als "Webcam" genutzt. Die Auswertung erfolgt dann via openCV auf einem PC, Raspi o.Ä.
https://how2electronics.com/qr-code-scanner-with-esp32-cam-module-opencv/

Wie aber bereits geschrieben, würde ich auf "was Fertiges" setzen. Alles in einem Gehäuse, Wiegand, 4 Drähte. Feddich

Und nein, ich hatte mit niemandem Kontakt. Ich nutze die QR Funktion in meiner Türstation eben genau dafür. QR Code an Handwerker geschickt und er kann auch kommen, wenn keiner da ist.

TomLee

Zitat von: Beta-User am 09 November 2022, 19:21:42
Vielleicht auch eine praktikable Alternative, wenn du den Anruf nicht selbst engegennehmen willst: https://wiki.fhem.de/wiki/SIP-Client#Auf_Anruf_warten_und_DTMF-T.C3.B6ne_empfangen

Ich frage mich wegen der Anmerkung:

ZitatDie verwendete Library Net::SIP fordert mehr Ressourcen als RaspberryPi, BananaPi & Co hergeben.

ob ich das meinem FHEM-Server (RasPi3b+) antun soll, da läuft eigentlich nicht wirklich viel drauf, CPU-Last liegt i.d.R. bei 5-6 %, ab und an kurzzeitig bei +/- max 20% ?

Beta-User

Zitat von: TomLee am 10 November 2022, 22:50:14
Ich frage mich wegen der Anmerkung:

ob ich das meinem FHEM-Server (RasPi3b+) antun soll, da läuft eigentlich nicht wirklich viel drauf, CPU-Last liegt i.d.R. bei 5-6 %, ab und an kurzzeitig bei +/- max 20% ?
Hmm, weiß nicht. Bei mir läuft FHEM schon "ewig" auf einer x86-Maschine. Habe das Modul aber auch schon sehr ewig im Einsatz, und wenn, ist auch ein 2-er Pi mit "nur FHEM" deswegen nicht komplett in die Knie gegangen. Ist vielleicht einen Test wert.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

TomLee

#39
Ok, danke, ich fahr jetzt runter, mach ein Backup der SD, und freu mich schon drauf das ich das jetzt endlich teste.

TomLee

Toll, hab in der Vergangenheit schon mit einigen Wemos D1 Mini hantiert, bei keinem einzigen hatte sich bisher die Mikro-USB-Buchse gelöst, bei dem ESP32 Modul das ich jetzt bekommen habe war das nach zwei drei Mal flashen gleich der Fall  >:(

TomLee

Zitat von: tomster am 10 November 2022, 21:18:11
https://how2electronics.com/qr-code-scanner-with-esp32-cam-module-opencv/

Hi,

damit hab ich mich die Tage beschäftigt und das Python-Script auf das nötigste angepasst:

#!/usr/bin/python3

# https://how2electronics.com/qr-code-scanner-with-esp32-cam-module-opencv/

import cv2
import numpy as np
import pyzbar.pyzbar as pyzbar
import urllib.request
import time
import paho.mqtt.client as mqtt

# MQTT
broker = 'bli'
port = 1883
clientid = 'doorpen'
username = 'bla'
password = 'blub'


url = 'bleb/'


prev = ""
pres = ""
while True:
    img_resp = urllib.request.urlopen(url+'cam-hi.jpg')
    imgnp = np.array(bytearray(img_resp.read()), dtype=np.uint8)
    frame = cv2.imdecode(imgnp, -1)
    #_, frame = cap.read()

    decodedObjects = pyzbar.decode(frame)
    for obj in decodedObjects:
        pres = obj.data
        if prev == pres:           
            pass
        else:
            print("Data: ", obj.data)
            # MQTT Connection
            client1 = mqtt.Client(clientid)
            client1.username_pw_set(username, password)
            client1.connect(broker, port)
            client1.loop_start()
            client1.publish("house/doorqr", obj.data)
            client1.disconnect()
            client1.loop_stop()
            prev = pres
            #time.sleep(15)
            #prev = ""


Ja, via MQTT, paho.mqtt.client hab ich sowieso installiert und wie es mit telnet umgesetzt wird hab ich keine Lust bisher gehabt mich mit zu beschäftigen.

Das if verhindert das der QR Code mehrfach ausgelesen wird, hält man den QR Code vor die Kamera wird der sonst mehrfach (sehr oft) ausgelesen, je nachdem wie lange man ihn davor hält.
Der Nachteil dabei, mag ich den gleichen QR Code mehrfach verwenden muss if prev == pres: erstmal wieder nicht zutreffen, weil prev halt solange pres bleibt bis ein anderer Code ausgelesen wird.

Meine Idee momentan, keine Ahnung ob ich da jetzt auf dem Holzweg bin, nach einem Schleifendurchgang 15 Sekunden zu warten (nichts zu tun) und dann prev einfach auf "nichts" zu setzen.
Mein Versuch das mit time.sleep  zu machen geht schonmal nicht, dann wird nach 15 Sekunden trotzdem der zuvor ausgelesene Code ausgegeben. Mit wait hab ich auch schon experimentiert, aber auch nicht hinbekommen.

Gibts hier jemanden der sich mit Python auskennt und mir sagen kann wie man das am besten angeht ?

TomLee

Oh man,  ::)

...
time.sleep(15)
pres = ""


und nicht:

...
time.sleep(15)
prev = ""


Trotzdem passt was noch nicht, wenn man den Code ein paar Sekunden vor die Kamera hält, wird er zwar nur einmal übertragen, nach 15 Sekunden aber ein weiteres mal und je nachdem wie länge man den Code vorgehalten hat kann es passieren das nach weiteren 15 Sekunden wieder eine Ausgabe erfolgt.

Otto123

Wenn ich diesen Code verstehen würde  :-[ :'(
Dieser Code macht eine Erkennung des QR Codes aus den Bildern des Live Streams?
Erkennt man ob ein qr code erkannt wurde oder ob das Bild leer ist?
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

TomLee

ZitatWenn ich diesen Code verstehen würde  :-[ :'(

Frag ja auch nicht dich sondern nach irgend jemandem der sich mit Python auskennt  :P

Hab vor ein paar Tagen auch null verstanden, wenn man aber Stück für Stück die wenigen verbliebenen "Kommandos" ( urllib.request.urlopen, np.array, img_resp.read, cv2.imdecode ...) in dem Skript nachliest (https://docs.opencv.org oder https://www.geeksforgeeks.org), ist es ganz einfach nachvollziehbar  ::)
Zitat
Dieser Code macht eine Erkennung des QR Codes aus den Bildern des Live Streams?

Ja, genau. Alles andere hab ich aus dem Skript rausgeworfen, da gehts nur drum das ein Fenster mit dem QR-Code in der Shell angezeigt wird.

ZitatErkennt man ob ein qr code erkannt wurde oder ob das Bild leer ist?

Da sollte eigentlich alles passen, das funktioniert mMn alles sehr gut.

Ich könnte am Ende das prev = pres einfach weglassen, dann wird aber zig mal in nur nur kurzer wo man den QR Code in die Kamera hält die Schleife durchgegangen -> der "Code" gesendet ->Event in FHEM erzeugt. Das könnt ich mit event-min-interval abfangen am Ende. Gefällt mir aber nicht, der "Verkehr" bleibt ja trotzdem.

Ich hätte gerne eine Lösung das die Schleife nur alle 15 Sekunden durchgegangen wird, so hab ich es zumindest mir bis jetzt zusammengereimt könnte ene vernünftige Lösung sein.