Beiträge von konse

    Franky07 ich kann dir sehr gut folgen und danke dir für die umfangreichen und schnellen Rückmeldungen!!!

    Optische Rückmeldungen waren übrigens immer vollsständig ausgeschlossen. Das war also nicht das Problem.


    Die Kombination mit dem Pico wäre für eine professionellere Umsetzung definitiv sehr cool und es gäbe dann auch noch mehr zu lernen. Ich glaube jedoch auf dieses Level werden wir es innerhalb der vorgesehenen Zeit mit den Schülern nicht schaffen. Auch ich selbst habe begrenzte Zeit zum vorbereiten. Aber ich werde erläutern, warum es nun so ist wie es ist, und wie man sich eigentlich noch intensiver reinfuchsen müsste um dem ganzen mehr flow zu verpassen und es professioneller umzusetzen.

    Martin28 vielen Dank auch für diese Tips. Die Infos von deinen Links Teil1/2 hatte ich bereits vorher aufgestöbert und damit herumprobiert, bin aber auf keinen wirklich grünen Zweig gekommen.

    Der Ansatz der in github beschrieben ist war mir neu. Er weist jedoch im letzten Beitrag genau auf das Problem hin, was Franky07 erläutert (https://github.com/dotnet/iot/iss…mment-898347886). D. h. senden und empfangen gleichzeitig wird mit einem Raspi ohne Zusatz nicht reibungsfrei und flüssig funktionieren.
    Hier wurde es dann mit einem zusätzlichen Arduino gelöst was mir allerdings im Vergleich zum Einsatz eines Pico wie Kanonen auf Spatzen erscheint. Aber gut, wer weiß was das Arduino sonst noch für Aufgaben hatte...

    Vielen Dank euch. Hiermit schließe ich das Thema.

    Ok, vielen Dank. Sehr informativ. So langsam komme ich auf den Trichter.

    Ich habe nun tatsächlich mal den Empfang deaktiviert:

    Mit folgender Konfiguration in der /boot/config.txt

    ...

    # Uncomment this to enable infrared communication.

    #dtoverlay=gpio-ir,gpio_pin=17

    #dtoverlay=gpio-ir-tx,gpio_pin=18

    #dtoverlay=gpio-ir-tx,gpio_pin=27

    dtoverlay=pwm-ir-tx

    ...

    Und siehe da: Die Befehle mit ir-ctl funktionieren einwandfrei genauso gut wie mit irsend.

    Das heißt ich verstehe, mit der laufenden Empfangsbereitschaft für IR-Signale ist mein Raspi schon so beschäftigt bzw. fokussiert, dass er einen gleichzeitigen Versand von sauberen IR-Signalen nicht mehr auf die Kette kriegt.

    Das macht dann alles durchaus Sinn.

    Und ja, wir wollen natürlich nicht nur auf schönes Wetter warten sondern auf Basis der Wetterprognose am Tag den optimalen Slot bestimmen in welchem bspw. der Ebike-Akku geladen wird, so dass er möglichst solar geladen wird. Das ist das eigentliche Thema für die Schüler sich hier mit Python auszutoben. Das ganze dann noch mit ein paar Kamerabildern und Auswertung mit imagemagick abgeglichen ob das Wetter wirklich so wurde wie prognostiziert. Die GPIO Schnittstelle / IR Steuerung ist im Grunde nur Beiwerk und macht es etwas runder, weil eine komfortable Bedienung ohne Tastatur möglich ist und die Tasten schön frei programmierbar sind. Per IR-Fernbedienung soll dann der Automatismus überschrieben werden können, falls z. B. der Akku doch sofort geladen werden soll :)

    Also smart Home nicht im Sinne von: Wie Verbrauche ich mehr, weil jetzt bei einem Gewitter automatisch meine Lichter angehen, sondern Smart Energy Home im Sinne von wie optimiere ich meinen Eigenverbrauch von PV oder Wind oder sonst etwas erneuerbarem, weil ich dann meine Verbraucher einschalte, wenn potentiell eine Erzeugung da ist :)

    Nun so wie es aussieht werde ich doch den Empfangsmodus immer wieder unterbrechem müssen wenn ich IR-Signale senden möchte.

    Gibt es hier eine schönere Möglichkeit als bei einem bestimmtem IR-Empfangssignal per Kommando in

    irexec.lircrc so etwas hier zu fabrizieren:

    sudo sed /lirc0/lirc1/g /etc/lirc/lirc_options.conf; sudo systemctl restart lircd.service; irsend ...; sudo sed /lirc1/lirc0/g /etc/lirc/lirc_options.conf; sudo systemctl restart lircd.service;

    Ich erreiche im Grunde mein Ziel, aber so richtig schick finde ich es noch nicht?!?

    Vielleicht noch der Grund weshalb ich auf einen Zero gegangen bin: Für mich der derzeit günstigste Rechner auf dem ein Debian läuft. D. h. das ist für Schüler hinsichtlich der Architektur interessant, dies weil sie viele Dinge die sie lernen, prinzipiell auch auf jedem normalen Webserver oder Unix/Linux-System so anwenden können. Wenn ich das richtig verstanden habe ist das mit dem Pico anders. Ansonsten überzeugt mich auch der geringe Stromverbrauch von ca. 1,5W. Mehr will ich für solche Spielereien garnicht verbrauchen :).

    Hui, danke, du bist ja ganz schön schnell im Antworten.

    Ein abwechselndes Senden und Empfangen ist ok für mich. Es muss nicht zeitgleich erfolgen.

    Aber dies durch umbenennen von /dev/lirc0 in /dev/lirc1 zu realisieren sehe ich nicht als praktikable Lösung an.

    Vor allem wenn das senden ja mit ir-ctl grundsätzlich funktioniert.

    Mein Eindruck ist, ggf. hast du mich an einer Stelle Mißverstanden:

    ir-ctl habe ich nicht gleichzeitig während eines Empfangsvorgangs genutzt.

    Aber die Empfangsbereitschaft war da.

    Oder meinst du, dass in dem Moment wenn die Empfangsbereitschaft da ist, grundsätzlich hardwaremäßig ein Senden Probleme macht, auch wenn nichts empfangen wird?

    Ich möchte grundsätzlich bei dieser Hardware bleiben, kein weiteres Geld ausgeben weil sie ja einwandfrei funktioniert! Wenn ich jetzt Steckdosen habe die mit 5V Relais geschaltet werden wäre es auch kein Problem, ich habe aber ja schon die anderen und finde das eigentlich ganz schick.
    Das ganze wird auch mehr im Unterricht für Lernzwecke: Python Lernen mit sinnvollem Einsatz - als dass es jetzt einem professionellen Einsatz standhalten soll.

    Vielleicht nun die grundsätzliche Frage an dich:
    Kennst du dich mit dem Unterschied aus wie

    irsend vs. ir-ctl funktionieren?

    Worin besteht der Unterschied?

    Könnte ggf. dieser Eintrag in der /boot/config.txt

    dtoverlay=pwm-ir-tx

    Dazu führen, dass das senden nicht mehr richtig funktioniert, falsche Sendefrequenz im Vergleich zu derjenigen die irsend verwendet o.ä.?

    Meine Idee war schon, ich wechsle für den Empfang einfach auf ir-ctl, das scheint ja zu funkionieren, sonst hätte ich meine IR-Fernsteuerung nicht erkannt. Allerdings ist es da wiederrum nicht so easy Befehle an den Empfang zu koppeln, bräuchte ich triggerhappy etc. Steige ich leider noch nicht richtig durch...

    Hi,

    richtig mit dem gleichzeitig das ist immer relativ. Ich habe das Thema mal auf unkompliziert geändert. Das trifft es aber ggf. auch noch nicht so richtig.

    Und ja verstehe natürlich die Frage: Um was geht es wirklich?

    Ich habe drei Steckdosen, die per lernbarem IR-Signal ferngesteuert geschaltet werden können.

    D. h. ich kann die Steckdosen einzeln ansprechen mit irgendeinem im Prinzip frei wählbaren irsend Befehl.

    Ich möchte nun die Steckdosen auf Basis von Wetterdaten mit einem Python-Programm vom Raspi aus schalten (PV-Eigenverbrauchsoptimierung).


    Dann habe ich die IR-Fernsteuerung. Mit dieser möchte ich jedoch im Zweifelsfall einzeln die Steckdosen wieder ein- oder ausschalten - also das Programm aktivieren/deaktivieren oder ggf. auf eine andere Zeit ändern (ich bin ja frei darin was die IR-Fernbedienung bewirkt. Wichtig ist dabei, dass ich nicht direkt die Steckdose mit der Fernbedienung schalte, weil sonst das Programm nicht mitbekommt, dass ich etwas geändert habe. Die Steckdosen schalten mit dem gleichen IR-Code ein und aus.

    Mir irsend funktionert das wunderbar auch wenn ich mehrmals den Befehl sende (wie hier beschrieben).

    Daher möchte ich gerne "gleichzeitig" und unkompliziert ohne Umwege senden und empfangen können. Und das kann das Teil ja auch im Prinzip ir-ctl ist der Beweis.

    Kann mir irgendjemand erklären warum irsend einwandfrei funktioniert, aber ir-ctl nicht funktioniert, selbst wenn ich IR-Rohsignale aufzeichne / wieder abspiele? Wie könnte man irsend mir lirc1 zum laufen bringen während lirc0 für den Empfang weiter funktioniert?
    Wie könnte ich ir-ctl zum funktionieren bringen?

    Vorneweg: Ich bin noch kein Experte, eher der Probiertyp der sich intuitiv durch viele Infos durchwühlt bis er sein Ziel erreicht.
    Damit bin ich bisher ganz gut gefahren, aber hier eindeutig an einer Grenze angelangt was mein Verständnis anbetrifft.

    Ausgangslage:

    -Raspberry PI Zero

    -Raspbian 11.5 Bullseye

    -lirc 0.10.1-6.3

    Funktionierende GPIO Konfiguration zum senden und empfangen von IR-Signalen.

    IR-Signale von der Fernsteuerung empfangen läuft perfekt, ich kann damit Shell-Befehle auslösen.

    IR-Signale senden per irsend läuft auch perfekt, ich kann damit andere Geräte steuern mit dem gleichen Befehl welche die IR-Fernsteuerung sendet.

    ABER: Senden und empfangen bekomme ich nicht parallel zum Laufen. Es ist wie verhext.

    Mein Ziel: Ich möchte gleichzeitig flexibel senden und empfangen von IR-Signalen ohne vor dem Senden irgendwelche configs umschreiben zu müssen oder services neu zu starten.

    Nun, nach tagelangem herumprobieren über Wochen hiermit die Frage an die Experten, wie kann ich das realisieren?

    1. Die Voraussetzung für erfolgreiches empfangen ist diese hier:
    Mit folgender Konfiguration in der /boot/config.txt

    ...

    # Uncomment this to enable infrared communication.

    dtoverlay=gpio-ir,gpio_pin=17

    #dtoverlay=gpio-ir-tx,gpio_pin=18

    #dtoverlay=gpio-ir-tx,gpio_pin=27

    dtoverlay=pwm-ir-tx

    ...

    Dann kann ich einwandfrei mit irw alle Tasten meiner IR-Fernsteuerung empfangen und damit Shell-Commands über irexec.lircrc auslösen.

    Funktioniert alles top.

    irsend funktioniert in dieser Konfiguration nicht (z. B. irsend SEND_START EPSON KEY_RESTART; sleep 3; irsend SEND_STOP EPSON KEY_RESTART):
    hardware does not support sending

    Error running command: Input/output error

    Durch diesen Eintrag in der /boot/config.txt: dtoverlay=pwm-ir-tx

    Kann ich allerdings parallel per ir-ctl senden. Z. B.:

    ir-ctl -d /dev/lirc1 -S necx:0x835584 -S necx:0x835584 -S necx:0x835584 -S necx:0x835584 --gap=125

    IR-Signale werden erfolgreich gesendet.

    ABER: Obwohl mit diesen Scancodes die Fernsteuerung eigentlich erkannt wurde (ir-keytable etc.), kann mein Endgerät mit den gesendeten IR-Signalen per ir-ctl nicht wirklich etwas anfangen. Ganz selten funktioniert es, allerdings viel zu selten (vielleicht 1 von 20 Versuchen und dabei muss ich noch teilweise am gap herumschrauben).

    2a. Die Voraussetzung für erfolgreiches senden ist diese hier (nach reboot):

    Mit folgender Konfiguration in der /boot/config.txt

    ...

    # Uncomment this to enable infrared communication.

    dtoverlay=gpio-ir,gpio_pin=17

    dtoverlay=gpio-ir-tx,gpio_pin=18

    #dtoverlay=gpio-ir-tx,gpio_pin=27

    #dtoverlay=pwm-ir-tx

    ...

    Dann funktioniert allerdings das erfolgreiche empfangen mit irw / Shell-Commands über irexec.lircrc nicht mehr.

    2b. Die Voraussetzung für erfolgreiches empfangen abwechselnd mit senden ohne reboot:

    Booten mit /boot/confi.txt von 1.:

    ...

    # Uncomment this to enable infrared communication.

    dtoverlay=gpio-ir,gpio_pin=17

    #dtoverlay=gpio-ir-tx,gpio_pin=18

    #dtoverlay=gpio-ir-tx,gpio_pin=27

    dtoverlay=pwm-ir-tx

    ...

    Jetzt kann ich erfolgreich empfangen.

    In /etc/lirc/lirc_options.conf wird nun die Zeile:

    device = /dev/lirc0

    geändert in
    device = /dev/lirc1

    Dann noch ein:

    sudo systemctl restart lircd.service

    Voila, jetzt kann ich wieder erfolgreich mit irsend senden.

    Will ich allerdings wieder empfangen muss ich das ganze wieder auf 0 ändern und einen erneuten lircd restart hinlegen.

    Dieses hin- und her ist mir zu aufwändig bzw. zu instabil für einen schnellen Betrieb. Wie kann ich es wirklich parallel realisieren?!?

    Ich habe in einigen Beiträgen erfahren, dass es mit Bullseye und LIRC wirklich viele Probleme gibt.
    Hier sprechen einige davon, einfach auf Kernel-Lösungen umzusteigen:
    https://debianforum.de/forum/viewtopic.php?t=174168

    https://www.mess.org/2020/01/26/Mov…c-core-tooling/

    Das wäre an sich die Lösung. ir-ctl funktioniert bei mir jedoch nicht zuverlässig (siehe oben).

    Ich habe es auch mit der Aufnahme von Rohdaten von der Fernsteuerung probiert. Leider ohne Erfolg.

    irsend scheint hier eine solidere wenn auch veraltete Lösung zu sein?!?

    Ich hoffe das ist alles soweit verständlich und freue mich riesig über eure Ideen/Feedback!