Meine Miner von extern steuern mit openhab

Für welche Projekte verwendet Ihr OpenHAB? Was habt Ihr automatisiert? Stellt eure Projekte hier vor.

Moderatoren: Cyrelian, seppy

Antworten
arcM
Beiträge: 2
Registriert: 22. Jan 2021 13:24

Meine Miner von extern steuern mit openhab

Beitrag von arcM »

Hallo zusammen, freue mich hier zu sein

Momentan habe ich ein Projekt am laufen. Das Projekt soll über mein Rasperry zu meinen 8er - Relais zu meinen Minern gehen. Es soll möglich sein über Openhab die Miner neu zu starten.

System Openhab 3.0.0.0
Bindings:
Exec Binding
One WireGPIO Binding

Folgendes habe ich gemacht:

Bild

Um einen Test zu machen, versuche ich das erste Relai zu schalten. Doch irgendwie hackt es hier noch.

Der Code soll eine 1 oder 5 Sekunden Spannung geben, um das Mainboard entweder runter zu fahren, anzuschalten oder ab zu würgen :P .
Die Implementation sieht wie folgt aus:

Die Datei home.item

Code: Alles auswählen

//Relays
Switch Relais1 "RELAIS1-long" { gpio="pin:2 activelow:yes initialValue:high" }

Switch Relais11 "RELAIS1-short"
Die Datei relais-1s.rules

Code: Alles auswählen

rule "RELAIS1 auto aus 1sec"
when
    Item Relais11 changed to ON
then
    // Set Relais1 to ON
    sendCommand(Relais1, ON)

    var TimerR11 myTimerR11 = createTimer(now.plusSeconds(1), [ |
    sendCommand(Relais1, OFF)
    ])

end

Die Datei relais-5s.rules

Code: Alles auswählen

rule "RELAIS1 auto aus 5sec"
when
    Item Relais1 changed to ON
then

var TimerR15 myTimerR15 = createTimer(now.plusSeconds(5), [ |
    sendCommand(Relais1, OFF)
])

end

Die Datei home.sitemap

Code: Alles auswählen

sitemap home label="Home"
{
Switch item=Relais1
}

Nun wäre ich über ein klein wenig Hilfe dankbar.

Wieso schaltet das Relai nicht? Übersehe ich hier etwas, wohl schon sonst würde es ja funktionieren... :D

Für eine Antwort oder einen Tipp wäre ich sehr dankbar!
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

MrCrashy
Beiträge: 113
Registriert: 2. Jan 2021 09:53

Re: Meine Miner von extern steuern mit openhab

Beitrag von MrCrashy »

Ok, ich zunächst ist es etwas komisch, dass du dein Relais 1 einschaltest und nach einer Sekunde wieder aus, wenn du gleichzeig eine Rule triggerst, die mit dem Relais getriggert wird und dieses dann auch nach 5 Sekunden ausschalten soll. Außerdem wäre es besser wenn du nicht "SendCommand()" nutzt, sondern "...sendCommand()".
Also wenn ich das Richtig verstehe, willst du einmal nach einer Sekunde und Nach 5 Sekunden ausschalten?

Ich habe dir das mal in eine Rule zusammengefasst.

Wichtig ist, dass du die Timer gleich mit den "var" benennst. Ebenfalls würde ich Timer immer nach ganz oben in der .Rules setzen.

So sollten deine Items jetzt aussehen:

Code: Alles auswählen

Switch Relais1 "Schalter eine Sekunde" { gpio="pin:2 activelow:yes initialValue:high" }

Switch Relais11 "Schalter 5 Sekunden"   { gpio="pin:2 activelow:yes initialValue:high" }
Und so sollte deine .rules jetzt aussehen:

Code: Alles auswählen

var Timer myTimerR11 
var Timer myTimerR15 
rule "Relais schaltung"
when 
	Item Relais1 changed to ON or
	Item Relais11 changed to ON 
then 
	if(Relais1.state == ON){
            myTimerR11 = createTimer(now.plusSeconds(1), [|
			Relais1.sendCommand(OFF)
            
		])
	}
	if(Relais11.state == ON){
		    myTimerR15 = createTimer(now.plusSeconds(5), [|
			Relais11.sendCommand(OFF)
		])
	}
end 
In die Sitemap musst du nun beide Schalter einbauen. Der Relais1 ist für eine Sekunde, der Relais11 ist für 5 Sekunden.
So sollte das ganze funktionieren. Für die ersten Test würde ich LogInfos empfehlen. So kann man sehen wo etwas hängt.

Benutzeravatar
udo1toni
Beiträge: 13955
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Meine Miner von extern steuern mit openhab

Beitrag von udo1toni »

Wenn es darum geht, ein Relais zu steuern, so sollte auch nur ein Item dafür verwendet werden.

Code: Alles auswählen

Switch Relais1 "Relais 1" { gpio="pin:2 activelow:yes initialValue:high" }
Will man nun das Relais unterschiedlich lang anziehen lassen, so sollte das über ein Proxy Item passieren:

Code: Alles auswählen

Number nRelais1 "Relais 1 [MAP(time.map):%s]"
Dazu eine Rule, die sich um alles kümmert:

Code: Alles auswählen

// globale Variablen vor der 1. Rule definieren!
var Timer tRelais1 = null

rule "Relais 1"
when
    Item nRelais1 received command                                                       // Proxy wurde z.B. über die UI gesteuert
then
    if(tRelais1 !== null && receivedCommand.toString != "0") {                           // Falls Timer noch läuft, Abbruch
        logInfo("relais1","Timer läuft noch. Ignoriere Kommando.")
        return;
    }
    if(!receivedCommand instanceof Number) {                                             // Falls kein gültiges Kommando gesendet wurde Abbruch
        logWarn("relais1","Falsches Kommandoformat! ({})",receivedCommand)
        return;
    }
    if(receivedCommand ==  0) {                                                          // Falls Kommando 0
        Relais1.sendCommand(OFF)                                                         // direkt aus
        tRelais1?.cancel
        tRelais = null
    } else {                                                                             // sonst
        Relais1.sendCommand(ON)                                                          // Relais 1 einschalten
        tRelais1 = createTimer(now.plusSeconds((receivedCommand as Number).intValue), [| // und Timer mit Wert des Kommandos starten
            Relais1.sendCommand(OFF)                                                     // Relais 1 ausschalten
            nRelais1.postUpdate(0)                                                       // und Schalter in der UI auf OFF setzen
            tRelais1 = null                                                              // Timervariable leeren
        ])
    }
end
Und in der Sitemap ein Switch Widget (wahlweise auch Selection):

Code: Alles auswählen

Switch item=nRelais1 mappings=[0="OFF",1="1Sec",5="5Sec"]
sowie eine time.map für die Darstellung im Label:

Code: Alles auswählen

0=OFF
1=ON(1 Sec.)
5=ON(5 Sec.)
.=-
Ach so... Stürzen die Miner so ab, dass sie über ssh nicht mehr zu erreichen sind? ansonsten wäre es wesentlich eleganter (und schonender für die Hardware...) entsprechende Befehle über ssh an die Maschine zu senden.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

arcM
Beiträge: 2
Registriert: 22. Jan 2021 13:24

Re: Meine Miner von extern steuern mit openhab

Beitrag von arcM »

udo1toni hat geschrieben: 23. Jan 2021 12:10 Wenn es darum geht, ein Relais zu steuern, so sollte auch nur ein Item dafür verwendet werden.

Code: Alles auswählen

Switch Relais1 "Relais 1" { gpio="pin:2 activelow:yes initialValue:high" }
Will man nun das Relais unterschiedlich lang anziehen lassen, so sollte das über ein Proxy Item passieren:

Code: Alles auswählen

Number nRelais1 "Relais 1 [MAP(time.map):%s]"
Dazu eine Rule, die sich um alles kümmert:

Code: Alles auswählen

// globale Variablen vor der 1. Rule definieren!
var Timer tRelais1 = null

rule "Relais 1"
when
    Item nRelais1 received command                                                       // Proxy wurde z.B. über die UI gesteuert
then
    if(tRelais1 !== null && receivedCommand.toString != "0") {                           // Falls Timer noch läuft, Abbruch
        logInfo("relais1","Timer läuft noch. Ignoriere Kommando.")
        return;
    }
    if(!receivedCommand instanceof Number) {                                             // Falls kein gültiges Kommando gesendet wurde Abbruch
        logWarn("relais1","Falsches Kommandoformat! ({})",receivedCommand)
        return;
    }
    if(receivedCommand ==  0) {                                                          // Falls Kommando 0
        Relais1.sendCommand(OFF)                                                         // direkt aus
        tRelais1?.cancel
        tRelais = null
    } else {                                                                             // sonst
        Relais1.sendCommand(ON)                                                          // Relais 1 einschalten
        tRelais1 = createTimer(now.plusSeconds((receivedCommand as Number).intValue), [| // und Timer mit Wert des Kommandos starten
            Relais1.sendCommand(OFF)                                                     // Relais 1 ausschalten
            nRelais1.postUpdate(0)                                                       // und Schalter in der UI auf OFF setzen
            tRelais1 = null                                                              // Timervariable leeren
        ])
    }
end
Und in der Sitemap ein Switch Widget (wahlweise auch Selection):

Code: Alles auswählen

Switch item=nRelais1 mappings=[0="OFF",1="1Sec",5="5Sec"]
sowie eine time.map für die Darstellung im Label:

Code: Alles auswählen

0=OFF
1=ON(1 Sec.)
5=ON(5 Sec.)
.=-
Ach so... Stürzen die Miner so ab, dass sie über ssh nicht mehr zu erreichen sind? ansonsten wäre es wesentlich eleganter (und schonender für die Hardware...) entsprechende Befehle über ssh an die Maschine zu senden.


Vielen Dank für eure Rückantworten.

Ziel ist es, bei einer Sekunde den Miner standartmässig ab zu schalten. 5 Sekunden soll das „abwürgen“ verursachen.
Die Miner sind zum teil einfach nicht mehr Online, meist weil irgendwas am Pool nicht stimmt. Sie laufen dann einfach im leerbetrieb und sind nicht mehr erreichbar. Dadurch möchte ich eine abschaltung, neustart und abwürg ermöglichen.

Das mit der rule ist Intressant und werde ich allenfalls auch noch einbinden :)

Zumindest funktioniert das Relai jetzt. Vielen Dank dafür!

Benutzeravatar
udo1toni
Beiträge: 13955
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Meine Miner von extern steuern mit openhab

Beitrag von udo1toni »

Nur so als Hinweis: Relais ist ein französisches Wort („Vorspann, Pferdewechsel“). Einzahl und Mehrzahl sind identisch...
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten