Garagen Lichtschranke
Moderator: Co-Administratoren
Garagen Lichtschranke
Hallo Leute.
Mein Name ist Werner, komme aus der Nähe von München und ich bin nicht nur neu hier, sondern bin auch Anfänger. Ich habe einen Raspberry Pi 3B+ und ich habe das Homematic Betriebssystem da laufen CCu3. Ich habe eine Garage mit einem Hörmann Antrieb (automatisches Flügeltor). Dazu habe ich auch das IP Modul für Hörmann Antriebe installiert. HmIP Mod Ho.
Jetzt habe ich eine Lichtschranke gebaut, mit Photozelle und Laser. Sollte der Laser unterbrochen sein, dann soll das Homematic Modul von Hörmann auf Stopp gehen, solange bis die Lichtschranke wieder frei ist. Auch sollten dabei die Remote Sender nicht funktionieren wenn der Laser unterbrochen ist. Die Photozelle habe ich auf den PIN 22 gelegt und möchte gerne den PIN abfragen. Dies mache ich mit:
system.Exec("echo 22 > /sys/class/gpio/export");
system.Exec("echo in > /sys/class/gpio/gpio22/direction");
var a = system.Exec("cat /sys/class/gpio/gpio22/value");
WriteLine(a);
Ich dachte wenn der Laser frei ist dann bekomme ich den Status 0 und wenn er unterbrochen ist, dann ist der Status 1. Oder umgekehrt. Wenn ich das in das Script einfüge und auf ausführen gehe, kommt immer nur 0. Auch wenn die Photozelle unterbrochen wird.
Kann mir da bitte jemand helfen? Vielen Dank im Voraus.
VG Werni335
Mein Name ist Werner, komme aus der Nähe von München und ich bin nicht nur neu hier, sondern bin auch Anfänger. Ich habe einen Raspberry Pi 3B+ und ich habe das Homematic Betriebssystem da laufen CCu3. Ich habe eine Garage mit einem Hörmann Antrieb (automatisches Flügeltor). Dazu habe ich auch das IP Modul für Hörmann Antriebe installiert. HmIP Mod Ho.
Jetzt habe ich eine Lichtschranke gebaut, mit Photozelle und Laser. Sollte der Laser unterbrochen sein, dann soll das Homematic Modul von Hörmann auf Stopp gehen, solange bis die Lichtschranke wieder frei ist. Auch sollten dabei die Remote Sender nicht funktionieren wenn der Laser unterbrochen ist. Die Photozelle habe ich auf den PIN 22 gelegt und möchte gerne den PIN abfragen. Dies mache ich mit:
system.Exec("echo 22 > /sys/class/gpio/export");
system.Exec("echo in > /sys/class/gpio/gpio22/direction");
var a = system.Exec("cat /sys/class/gpio/gpio22/value");
WriteLine(a);
Ich dachte wenn der Laser frei ist dann bekomme ich den Status 0 und wenn er unterbrochen ist, dann ist der Status 1. Oder umgekehrt. Wenn ich das in das Script einfüge und auf ausführen gehe, kommt immer nur 0. Auch wenn die Photozelle unterbrochen wird.
Kann mir da bitte jemand helfen? Vielen Dank im Voraus.
VG Werni335
Zuletzt geändert von Roland M. am 18.09.2023, 18:54, insgesamt 1-mal geändert.
Grund: Thema verschoben
Grund: Thema verschoben
- Henke
- Beiträge: 1542
- Registriert: 27.06.2022, 20:51
- System: CCU
- Hat sich bedankt: 144 Mal
- Danksagung erhalten: 315 Mal
Re: Garagen Lichtschranke
Code: Alles auswählen
system.Exec("echo 22 > /sys/class/gpio/export");
system.Exec("echo in > /sys/class/gpio/gpio22/direction");
string stdout; string stderr;
system.Exec ("cat /sys/class/gpio/gpio22/value",&stdout,&stderr);
var a = stdout;
Re: Garagen Lichtschranke
Wenn ich jetzt also die Zeilen in mein script einfüge dann bekomme ich 0 wenn die photozelle leuchtet und ich auf script testen drücke und wenn ich dann das Licht abschalte und auf script testen drücke dann bekomme ich 1. Oder eben umgekehrt. Sehe ich das richtig? Bei WriteLine(a);
Re: Garagen Lichtschranke
Das nächste Problem wäre jetzt, den richtigen Kanal von dem Gerät Garagentor zu aktivieren. Also wenn a= 1 dann dem Gerät Garagentor Kanal 1 auf stopp setzen. Dazu gibt es ein skript das zunächst feststellt, ob sich bei dem Garagentor überhaupt was ändert. Wenn ja, dann stelle ich fest, ob a=1 ist (also die Photozelle unterbrochen ist). Ist a=1 dann sollte das Garagentor, Kanal 1 auf stopp gesetzt werden. Welchen Befehl brauche ich denn um den letzten Teil umsetzen zu können? Also den a=1 Teil. Ich finde einfach die Lösung nicht. Sollte jemand eine Idee haben dann wäre ich sehr froh wenn er mir das mitteilen könnte. Vielen Dank.
- Henke
- Beiträge: 1542
- Registriert: 27.06.2022, 20:51
- System: CCU
- Hat sich bedankt: 144 Mal
- Danksagung erhalten: 315 Mal
Re: Garagen Lichtschranke
Das habe ich hier gefunden, als Beispiel.
!- Alle Kanäle in wählbaren verschiedenen Räumen/Gewerken/Favoriten (trennen mit \t )
!- Original v0.1 by Alchy
!- Edited v0.2 by Baxxy
!- viewtopic.php?f=19&t=26800&p=573840#p573626
string liste = "Garage"; !- Gewerk oder Raum eintragen
!- Dont touch behind this Line
string index;integer counter = 0;
foreach (index, liste) {
object sec = dom.GetObject(index);
string itemId;
foreach(itemId, sec.EnumUsedIDs()) {
var item = dom.GetObject(itemId);
if (item.IsTypeOf(OT_CHANNEL)) {
if (item.DPByHssDP("STATE").Value())
{counter = counter +1; WriteLine(item #" Status:\t"#item.DPByHssDP("STATE").Value());}
}}}
if (counter > 0) {WriteLine("Irgendwas ist an");
system.Exec("echo 22 > /sys/class/gpio/export");
system.Exec("echo in > /sys/class/gpio/gpio22/direction");
string stdout; string stderr;
system.Exec ("cat /sys/class/gpio/gpio22/value",&stdout,&stderr);
var a = stdout;
WriteLine(a);
else{WriteLine("Alles Aus!"); }
!_______________hier käme jetzt eine if Abfrage über den Zustand von a entweder 0 oder 1------ dann Gerät ansprechen
! zumindest habe ich mir das so vorgestellt?????
!- Alle Kanäle in wählbaren verschiedenen Räumen/Gewerken/Favoriten (trennen mit \t )
!- Original v0.1 by Alchy
!- Edited v0.2 by Baxxy
!- viewtopic.php?f=19&t=26800&p=573840#p573626
string liste = "Garage"; !- Gewerk oder Raum eintragen
!- Dont touch behind this Line
string index;integer counter = 0;
foreach (index, liste) {
object sec = dom.GetObject(index);
string itemId;
foreach(itemId, sec.EnumUsedIDs()) {
var item = dom.GetObject(itemId);
if (item.IsTypeOf(OT_CHANNEL)) {
if (item.DPByHssDP("STATE").Value())
{counter = counter +1; WriteLine(item #" Status:\t"#item.DPByHssDP("STATE").Value());}
}}}
if (counter > 0) {WriteLine("Irgendwas ist an");
system.Exec("echo 22 > /sys/class/gpio/export");
system.Exec("echo in > /sys/class/gpio/gpio22/direction");
string stdout; string stderr;
system.Exec ("cat /sys/class/gpio/gpio22/value",&stdout,&stderr);
var a = stdout;
WriteLine(a);
else{WriteLine("Alles Aus!"); }
!_______________hier käme jetzt eine if Abfrage über den Zustand von a entweder 0 oder 1------ dann Gerät ansprechen
! zumindest habe ich mir das so vorgestellt?????
-
- Beiträge: 9826
- Registriert: 27.04.2020, 10:34
- System: CCU
- Hat sich bedankt: 711 Mal
- Danksagung erhalten: 1660 Mal
Re: Garagen Lichtschranke
Wenn du code in Code Tags postest, ist es für alle Beteiligten leichter lesbar. Habe ich in den Debugging-Tips sogar erklärt.
LG, Michael.
Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.
Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++
Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.
Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++
Re: Garagen Lichtschranke
ok. Danke für den Hinweis. Wo finde ich denn diese Debugging-Tips? Ich werde mich dann natürlich daran halten.
-
- Beiträge: 9826
- Registriert: 27.04.2020, 10:34
- System: CCU
- Hat sich bedankt: 711 Mal
- Danksagung erhalten: 1660 Mal
Re: Garagen Lichtschranke
In der Signatur
LG, Michael.
Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.
Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++
Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.
Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++