Seite 2 von 3

Re: den Status der CCU3 LED im Skript

Verfasst: 19.02.2024, 18:32
von Henke
Aufgrund dieses Theats hat es mich gepackt und ich spare jetzt auch in der Nacht Strom durch ausschalten der LEDs. 8)

Siehe: viewtopic.php?f=77&t=81798
andrzejgilas hat geschrieben:
19.02.2024, 17:48
RaspberryMatic nicht funktionieren werden
Nun ja, bei mir schon. Aber ich interpretiere auch eher die Links und mache da dann das entsprechende raus.

Als erstes solltest du den Zustand der LED bzw. das Ansprechen trennen von der restlichen Logik.
Nehmen wir dazu als Beispiel einen HmIP-BSL, den ich für die Badezimmer verwende. Das Ist ein Schalter mit LEDs und wenn das Licht an ist, leuchtet die untere Weiß. Der Status ob das Licht an ist, wird über den Status des Schaltausgangs bestimmt und nicht darüber ob die untere LED leuchtet.
Das bedeutet in deinem Fall, das du in allen Programm nicht die LED steuerst, sondern eine Systemvariable setzt, mit der gewünschten Farbe. Und da es 3 (Optic) LED gibt, auch gleich strukturiert.
Systemvariable: LED.Vorne (Farbe+auto), LED.ATC (true,false), LED.PWR (true,false)
Diese Variablen nutzt du in einen Programm um diese dann zu steuern. Eine solche Trennung hat den Vorteil bei Änderungen.

Ich habe die Steuerung und das Auslesen wie folgt realisiert bzw. was ich nicht verwendet habe:
Nicht verwendet:
/etc/config/disableLED - ich weiß nicht genau was das macht und brauche es auch nicht.
.../trigger - der schaltet andere ab. Läuft bei mir auch ohne abschalten auch nach Neustart. Also Finger weg, wenn es so geht.

Verwendet zum Setzen und Auslesen:
.../brightness
und um RasberryMatic daran zu hindern alles umzustellen:
daemon "hss_led" stoppen bzw. starten
Da könnte "/etc/config/disableLED" evtl. auch ausreichen.

Das Lesen des Zustand der LED wird über "watch" der ensprechenden .../brightness realisiert. Es dürfte zwar auch durch einen Programmaufruf alle 10 Sekunden laufen, aber ein daemon der automatisch eine Systemvariable schreibt ist wesentlich eleganter und schont die Rega.

Re: den Status der CCU3 LED im Skript

Verfasst: 19.02.2024, 19:42
von andrzejgilas
Henke hat geschrieben:
19.02.2024, 18:32
Ich habe die Steuerung und das Auslesen wie folgt realisiert bzw. was ich nicht verwendet habe:
Nicht verwendet:
/etc/config/disableLED - ich weiß nicht genau was das macht und brauche es auch nicht.
.../trigger - der schaltet andere ab. Läuft bei mir auch ohne abschalten auch nach Neustart. Also Finger weg, wenn es so geht.
wenn die Datei: disableLED in etc/config vorhanden ist, leuchtet die CCU3-LED nicht, wenn sie nicht vorhanden ist, leuchtet die LED.
mein Skript prüft, ob diese Datei vorhanden ist oder nicht und schreibt sie dank Harry in eine Systemvariable, ich habe mich wie ein kleines Kind gefreut, als es anfing zu funktionieren
Was Sie in diesem Thema viewtopic.php?f=77&t=81798 getan haben, ist für mich kosmisch. Das ist wie ein Vergleich zwischen einem Fahrrad und einem Auto ( ich bin ein Fahrrad ;-) )
Wenn Du schreiben könntest, wie man die Farben der LEDs mit Skripten in CCU3 steuern kann, würde ich mich sehr freuen.
Vielen Dank und ich bin sehr beeindruckt von Ihrem Wissen

und es tut mir leid, dass ich die deutsche Sprache so sehr verletzt habe

Re: den Status der CCU3 LED im Skript

Verfasst: 20.02.2024, 09:25
von Henke
Es gibt 5 steuerbare LEDs auf der CCU:
'rpi_rf_mod:red',
'rpi_rf_mod:green',
'rpi_rf_mod:blue',
"ACT",
"PWR",

An,Aus geht über: /sys/class/leds/XXX'/brightness

Damit ist "kleine grüne" ein:

Code: Alles auswählen

	system.Exec("echo 255 >/sys/class/leds/ACT/brightness"); 
und aus;

Code: Alles auswählen

	system.Exec("echo 0 >/sys/class/leds/ACT/brightness"); 
Sollte das nicht laufen, bei beiden Befehlen noch

Code: Alles auswählen

	system.Exec("echo none >/sys/class/leds/ACT/trigger"); 
davor setzen, um die Kontrolle zu übernehmen.

Die vordere LED ist etwas problematischer, da sie regelmäßig angesteuert wird. Also mal folgendes Testen statt aus:

Code: Alles auswählen

	system.Exec("touch /etc/config/disableLED");
	system.Exec("echo 255 >/sys/class/leds/rpi_rf_mod:green/brightness"); 
	system.Exec("echo 255 >/sys/class/leds/rpi_rf_mod:blue/brightness"); 
Wie lange leuchtet die und in welcher Farbe?

Re: den Status der CCU3 LED im Skript

Verfasst: 20.02.2024, 16:30
von andrzejgilas
Mit dem Befehl schalte ich die kleine grüne LED ein

Code: Alles auswählen

system.Exec("echo heartbeat >/sys/class/leds/ACT/trigger"); 
Die große RPI RF MOD-Diodensteuerung funktioniert bei mir mit Ihrem Code nicht

Re: den Status der CCU3 LED im Skript

Verfasst: 20.02.2024, 17:09
von Henke
andrzejgilas hat geschrieben:
20.02.2024, 16:30
Mit dem Befehl schalte ich die kleine grüne LED ein
und das ist nicht der richtige Befehl!

Einfach mal mit Putty direkt auf die CCU und dann:

Code: Alles auswählen

echo none >/sys/class/leds/ACT/trigger
echo 1 >/sys/class/leds/ACT/brightness
echo 0 >/sys/class/leds/ACT/brightness
echo 1 >/sys/class/leds/ACT/brightness
echo 0 >/sys/class/leds/ACT/brightness
Der trigger muss nur einmal ausgeführt werden um die Kontrolle zu übernehmen.
Danach wird die grüne LED An/Aus/An/Aus geschaltet.

Jetzt mal die Kontrolle der großen übernehmen:

Code: Alles auswählen

monit unmonitor hss_led
/sbin/start-stop-daemon -K -q -p /var/run/hss_led.pid
und schalten:

Code: Alles auswählen

echo 0 >/sys/class/leds/rpi_rf_mod:blue/brightness
echo 1 >/sys/class/leds/rpi_rf_mod:red/brightness
echo 1 >/sys/class/leds/rpi_rf_mod:green/brightness
echo 1 >/sys/class/leds/rpi_rf_mod:blue/brightness
echo 0 >/sys/class/leds/rpi_rf_mod:red/brightness
echo 0 >/sys/class/leds/rpi_rf_mod:green/brightness
echo 0 >/sys/class/leds/rpi_rf_mod:blue/brightness
Kontrolle wieder abgeben:

Code: Alles auswählen

/sbin/start-stop-daemon -S -q -b -m -p /var/run/hss_led.pid --exec /bin/hss_led -- -l 6
monit monitor hss_led

Re: den Status der CCU3 LED im Skript

Verfasst: 20.02.2024, 17:26
von jp112sdl
Statt

Code: Alles auswählen

monit unmonitor hss_led
/sbin/start-stop-daemon -K -q -p /var/run/hss_led.pid
kann auch auf kürzerem Weg

Code: Alles auswählen

monit stop hss_led
und

Code: Alles auswählen

monit start hss_led
verwendet werden.

Re: den Status der CCU3 LED im Skript

Verfasst: 20.02.2024, 17:46
von andrzejgilas
alles funktioniert :-) Ich habe schon tausend Ideen, wie ich es verwenden kann

kleine grüne LED - leuchtet permanent:

Code: Alles auswählen

system.Exec("echo 1 >/sys/class/leds/ACT/brightness"); 
kleine grüne LED - dauerhaft ausschalten:

Code: Alles auswählen

system.Exec("echo 0 >/sys/class/leds/ACT/brightness");
kleine rote LED - dauerhaft einschalten:

Code: Alles auswählen

system.Exec("echo 1 >/sys/class/leds/PWR/brightness");
kleine rote LED - dauerhaft ausschalten:

Code: Alles auswählen

system.Exec("echo 0 >/sys/class/leds/PWR/brightness");




LED CCU3 - Kontrolle von CCU3 übernehmen: - wichtig !

Code: Alles auswählen

system.Exec("monit stop hss_led"); 


Einschalten der grüne farbe LED CCU3:

Code: Alles auswählen

system.Exec("echo 1 >/sys/class/leds/rpi_rf_mod:green/brightness");
Ausschalten der grüne farbe LED CCU3:

Code: Alles auswählen

system.Exec("echo 0 >/sys/class/leds/rpi_rf_mod:green/brightness");
Einschalten der roten farbe LED CCU3:

Code: Alles auswählen

system.Exec("echo 1 >/sys/class/leds/rpi_rf_mod:red/brightness");
Ausschalten der roten farbe LED CCU3:

Code: Alles auswählen

system.Exec("echo 0 >/sys/class/leds/rpi_rf_mod:red/brightness"); 
Einschalten der blauen farbe LED CCU3:

Code: Alles auswählen

system.Exec("echo 1 >/sys/class/leds/rpi_rf_mod:blue/brightness"); 
Ausschalten der blauen farbe LED CCU3:

Code: Alles auswählen

system.Exec("echo 0 >/sys/class/leds/rpi_rf_mod:blue/brightness");



LED CCU3 - Übergabe der Steuerung an CCU3:

Code: Alles auswählen

system.Exec("monit start hss_led");



EINSCHALTEN VON ROT UND GRÜN - ERGIBT GELBE FARBE
GRÜN UND BLAU AN - ERGIBT TÜRKISE FARBE
GRÜN UND BLAU UND ROT EIN - WEISS
BLAU UND ROT EIN - ERGIBT DIE FARBE ROSA ( MAGENTA )

Ich entschuldige mich für die große Schriftgröße

Re: den Status der CCU3 LED im Skript

Verfasst: 20.02.2024, 18:52
von Henke
putty -> script
monit start hss_led -> system.Exec("monit start hss_led");

Systemvariable: LED.Vorne.Set (Farbe+auto), LED.Vorne.Ist
Programm das bei Änderung einer der Systemvariablen triggert
Dann folgendes Script, nicht getestet, muss noch um die anderen Farben erweitert werden:

Code: Alles auswählen

! Script LED.Vorne setzen
object oIst = dom.GetObject(ID_SYSTEM_VARIABLES).Get("LED.Vorne.Ist");
object oSet = dom.GetObject(ID_SYSTEM_VARIABLES).Get("LED.Vorne.Set");
string sSet = oSet.State();
string sIst = oIst.State();

if ( sSet == sIst ) {	return; }

if ( sSet != "auto" )
{
	if ( sIst == "auto" )
	{
		! my control
		system.Exec("monit stop hss_led");
	}
}
else
{
	if ( sIst != "auto" )
	{
		! your control
		system.Exec("monit start hss_led");
		oIst.State("auto");
	}
	return;
}

if ( sSet == "red" )
{
	system.Exec("echo 255 >/sys/class/leds/rpi_rf_mod:red/brightness");
	system.Exec("echo 0 >/sys/class/leds/rpi_rf_mod:green/brightness");
	system.Exec("echo 0 >/sys/class/leds/rpi_rf_mod:blue/brightness");
    oIst.State("sSet"); return;
}

if ( sSet == "blue" )
{
	system.Exec("echo 0 >/sys/class/leds/rpi_rf_mod:red/brightness");
	system.Exec("echo 0 >/sys/class/leds/rpi_rf_mod:green/brightness");
	system.Exec("echo 255 >/sys/class/leds/rpi_rf_mod:blue/brightness");
    oIst.State("sSet"); return;
}

! usw...
!            case 'red': this.manual(255, 0, 0); break;
!            case 'green': this.manual(0, 255, 0); break;
!            case 'blue': this.manual(0, 0, 255); break;
!            case 'yellow': this.manual(255, 255, 0); break;
!            case 'magenta': this.manual(255, 0, 255); break;
!            case 'cyan': this.manual(0, 255, 255); break;
!            case 'white': this.manual(255, 255, 255); break;
!            case 'off': this.manual(0, 0, 0); break;

WriteLine ( "Farbe unbekannt " # sSet );
quit;
Die LED wird dann einfach durch setzen der Variable "LED.Vorne.Set" gesteuert und wenn die Anzeige beim manuellen Betrieb ausreicht, die Variable "LED.Vorne.Ist" nutzen.

Edit: Haben uns überschnitten, aber ich halte meine Version für etwas eleganter. 8)

Re: den Status der CCU3 LED im Skript

Verfasst: 20.02.2024, 19:07
von andrzejgilas
welche Typen von Systemvariablen sind zu verwenden?

Re: den Status der CCU3 LED im Skript

Verfasst: 20.02.2024, 19:40
von Henke
string - Zeichenkette

Eleganter wäre es jedoch das auf Liste umzustellen nur dann muss auch das Script angepasst werden.