Spielzeug :)

Allgemeine Fragen rund um die "Smart Home" Hardware/Komponenten

Moderatoren: seppy, udo1toni

Antworten
Benutzeravatar
udo1toni
Beiträge: 15678
Registriert: 11. Apr 2018 18:05
Answers: 254
Wohnort: Darmstadt

Re: Spielzeug :)

Beitrag von udo1toni »

Du musst einfach die App "leeren", also ein "" als Payload schicken.
Alternativ kannst Du auch über die Reihenfolge der Apps tricksen, aber das ist eher umständlich, Du musst ja ohnehin bei Aktualisierungen des Wertes das vollständige JSON senden, dann kannst Du es bei einem 0-Wert auch löschen.
Den "Beep" gibt es so nicht, Du kannst aber eine (beliebige) Tonfolge abspielen lassen, und zwar wahlweise als direkte Sequenz übergeben, oder Du speicherst die Melodie auf der Uhr und lässt die Datei "abspielen".
Schau Dir dazu am besten die offizielle Doku zu Awtrix3 an, die kannst Du direkt von Deiner Uhr aus aufrufen (WebUI -> Docs -> Getting started -> Features/Sounds bzw. Features/Apps. bzw. API/Mqtt/HTTP - jeweils linke Seite)
openHAB5.1.3 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime - LXC, 4 Kerne, 3 GByte RAM)
Hostsystem Proxmox VE 9.1.6 - AMD Ryzen 5 3600 6 Kerne, 12 Threads - 64 GByte RAM - ZFS Pools: Raid Z1, 3 x 20 TB HDD -> 40 TByte und Raid Z0-Mirrored 4 x 1 TByte NVMe -> 2 TByte

nw378
Beiträge: 363
Registriert: 22. Sep 2018 10:38
Answers: 5

Re: Spielzeug :)

Beitrag von nw378 »

mad-mike hat geschrieben: 6. Feb 2025 20:31 Ich habe mir die Benachrichtigung von dem I-Serv der Schule anzeigen lassen... Das klappt auch wunderbar.
Wie machst Du das denn? :?:
openHAB 5.1.3 @ RPi 5 / M.2 SSD - openhabian/Debian 13.3 (trixie) - InfluxDB2 und Grafana @ Synology Docker - KNX, Viessmann vcontrol, u.v.m.

mad-mike
Beiträge: 510
Registriert: 6. Jan 2021 18:05
Answers: 4

Re: Spielzeug :)

Beitrag von mad-mike »

Wie machst Du das denn? :?:
Das habe ich mit dem Mail Binding realisiert.

IMAP fragt alle 30 minuten den account ab.

Der Ordnername heisst:

Code: Alles auswählen

Inbox
Das Item zeigt mir die ungelesenen Mail als zahl an.
Gruss mad-mike

openHABian 5.1.3 auf Raspberry Pi 4 Mod. b (8GB) ;)

mad-mike
Beiträge: 510
Registriert: 6. Jan 2021 18:05
Answers: 4

Re: Spielzeug :)

Beitrag von mad-mike »

Du musst einfach die App "leeren", also ein "" als Payload schicken.
Perfekt, Danke
Gruss mad-mike

openHABian 5.1.3 auf Raspberry Pi 4 Mod. b (8GB) ;)

mad-mike
Beiträge: 510
Registriert: 6. Jan 2021 18:05
Answers: 4

Re: Spielzeug :)

Beitrag von mad-mike »

Wie kann man denn 2 werte berechnen, welche in der "IF" stehen?

folgende Ausgangs situation:

Code: Alles auswählen

rule "awtrix soc"
when                 
    Item SOC changed
then
    if(!(newState instanceof Number))
        return;
    var Number nSOC = (newState as Number).floatValue
    
    val nSOC_set = (SOC_set.state as Number).intValue

logInfo("awtrix","SOC liefert = ({})", SOC.state)
logInfo("awtrix","SOC_SET liefert = ({})", SOC_set.state)    
    
    
    var strIcon = "8481"                                    // Bat grün
    if(nSOC < 90) strIcon = "8480"                          // Bat gelb
    if(nSOC < 60) strIcon = "8479"                          // Bat rot
 
    val strZahl = String.format("%.0f",nSOC)
    var json='{"pos" : 3,"text" : "' + strZahl + '%","icon" : ' + strIcon + ',"color" : "' + "#00FF00" + '"}'

    if(nSOC <= nSOC_set) json='{"pos" : 3,"text" : " off ","icon" : 52463 ,"color" : "' + "#00FF00" + '"}'
    
    
    AwTrixSOC.sendCommand(json)
    
end
in zeile 16 steht
und in zeile 17 steht
Ich möchte das in abhängigkeit von SOC (akku ladezustand) und SOC_set (Akku minimum einstellung) abhängig machen.

Grund: in der Aktuellen zeit steht der Akku minimum auf etwa 50 %, je länger die Sonnen tage werden, wird der Wert langsam von 50% auf 10 % sinken um einen größeren Akku nutzen zu erhalten.

Sicherlich ist es nur ein optischer Punkt auf einer Anzeige der Uhr, aber eventuell kann man das ja so realisieren das man diesen IF werte prozentual verschiebt.

;) Gruss
Gruss mad-mike

openHABian 5.1.3 auf Raspberry Pi 4 Mod. b (8GB) ;)

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

Re: Spielzeug :)

Beitrag von udo1toni »

Ich bin mir nicht sicher, ob ich die Aufgabenstellung korrekt erfasst habe, aber hier ein dynamisches "Angebot":

Code: Alles auswählen

rule "awtrix soc"
when
    Item SOC changed
then
    var nSOC = -1                                                                  // default: Fehler
    if(newState instanceof Number)                                                 // falls gültiger Wert
        nSOC = (newState as Number).intValue                                       // Wert übernehmen

    var nSOC_set = -1                                                              // default: Fehler
    if(SOC_set.state instanceof Number)
        nSOC_set = (SOC_set.state as Number).intValue

    logInfo("awtrix","SOC = {}, SOC_set = {}", nSOC, nSOC_set)

    var json='{"pos": 3, "text": "'
    val strZahl = String.format("%d",nSOC) + " %"

    if(nSOC < 0 || nSOC_set < 0)         json = json + 'Fehler!", "icon": 2493'    // Fehler
    else {
        val nBereich = (100 - nSOC_set)/4                                          // 1/4 der erlaubten Entnahme
        if(nSOC < nSOC_set)              json = json + ' off ", "icon": 52463'     // off ab Grenzwert erreicht
        else if(nSOC < 100 - nBereich*3) json = json + strZahl + '", "icon": 8479' // Bat rot ab 3/4 des Grenzwertes
        else if(nSOC < 100 - nBereich)   json = json + strZahl + '", "icon": 8480' // Bat gelb ab 1/4 des Grenzwertes
        else                             json = json + strZahl + '", "icon": 8481' // Bat grün bis 1/4 des Grenzwertes
    }
    json = json + ', "color": "#00FF00"}'

    AwTrixSOC.sendCommand(json)
end
Ungetestet...

Das erhoffte ;) Verhalten:
Sollte einer der Eingabewerte SOC bzw. SOC_set ungültig sein, zeigt die App "Fehler" an (das Icon 2493 ist ein rotes Ausrufezeichen).
Sind beide Werte gültig, kommt es auf das Verhältnis von SOC zu SOC_set an.
(100 - SOC_set)/4 ist 1/4 der erlaubten Entnahmekapazität.
Die Untergrenze wird durch SOC_set gebildet, ab Unterschreiten dieses Grenzwertes springt die Anzeige auf off mit dem Icon 52463.
Wurden mehr als 3/4 der erlaubten Kapazität entnommen, springt das Icon auf rot.
Wurden mehr als 1/4 der erlaubten Kapazität entnommen, springt das Icon auf gelb.
Falls keine der oberen Bedingungen Zutrifft, wurde bisher weniger als 1/4 entnommen und die Anzeige kann grün sein :)
Das Zusammensetzen des JSON Objekts ist leider etwas unübersichtlich, alternativ müsste man je Entscheidungsblock zwei Variablen setzen, womit jeder Entscheidungsblock separat geklammert werden müsste - auch nicht schön...
openHAB5.1.3 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime - LXC, 4 Kerne, 3 GByte RAM)
Hostsystem Proxmox VE 9.1.6 - AMD Ryzen 5 3600 6 Kerne, 12 Threads - 64 GByte RAM - ZFS Pools: Raid Z1, 3 x 20 TB HDD -> 40 TByte und Raid Z0-Mirrored 4 x 1 TByte NVMe -> 2 TByte

mad-mike
Beiträge: 510
Registriert: 6. Jan 2021 18:05
Answers: 4

Re: Spielzeug :)

Beitrag von mad-mike »

Funktioniert perfekt. :!:

Habe zum testen einfach mal ein

Code: Alles auswählen

SOC.postUpdate(-1)
abgesetzt.


Ging auch gleich der Wechselrichter in Standby :oops: :D.
Auch mit dem Verstellen des untern SOC bereiches wird das icon dynamisch gewählt. Exakt so stelle ich mir das vor. :!:

Danke dafür.


Aber was komisches:
Das icon 2493 wird falsch dargestellt. Im Web ist das korrekte zu sehen, unter awtrix nicht. ich habe mich für 9823 entschieden...


Edit:

Zeile 21 musste ich noch ein "=" einfügen...

Code: Alles auswählen

        if(nSOC <= nSOC_set)             json = json + ' off ", "icon": 52463'     // off ab Grenzwert erreicht
Gruss mad-mike

openHABian 5.1.3 auf Raspberry Pi 4 Mod. b (8GB) ;)

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

Re: Spielzeug :)

Beitrag von udo1toni »

mad-mike hat geschrieben: 9. Feb 2025 19:43 In Zeile 21 musste ich noch ein "=" einfügen...
Ja, stimmt, ich hab natürlich auf Unterschreiten des Grenzwertes getestet, nicht auf erreichen...
openHAB5.1.3 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime - LXC, 4 Kerne, 3 GByte RAM)
Hostsystem Proxmox VE 9.1.6 - AMD Ryzen 5 3600 6 Kerne, 12 Threads - 64 GByte RAM - ZFS Pools: Raid Z1, 3 x 20 TB HDD -> 40 TByte und Raid Z0-Mirrored 4 x 1 TByte NVMe -> 2 TByte

Pierrecinema
Beiträge: 42
Registriert: 12. Apr 2021 01:15
Answers: 0

Re: Spielzeug :)

Beitrag von Pierrecinema »

Hallo

Habe mir heute selber einen gebaut. Matrix mit esp32. Was ich nicht verstehe wo muss ich die custom Apps von homeassistent flows installieren oder konfigurieren

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

Re: Spielzeug :)

Beitrag von udo1toni »

Ich interpretiere jetzt mal, dass Du eine AwTrix-kompatible Anzeige gebaut und mit Awtrix3 geflasht hast :)

Nutzt Du denn HomeAssistant?
Falls ja, kannst Du die Flows in HomeAssistant installieren, so wie das dort vorgesehen ist (Ich habe keine Ahnung von HA und dies ist auch nicht das richtige Forum für HA Fragen)
Falls Du openHAB nutzt, reicht das mqtt Addon aus.
In der aktuellen Version OH5 ist das AwTrix Addon als Teil von mqtt direkt installiert und Du kannst die Uhr als "Tochter Bridge" anlegen.
Für jede dynamisch generierte AwTrix App wird dann automatisch auch ein Thing unterhalb dieser Bridge generiert.

Der Begriff "App" bedeutet in AwTrix nichts anderes als "statische Ansicht". Wobei hier "statisch" bedeutet, dass sich der Gesamtinhalt der Ansicht nicht ändert. Man kann halt Strings übergeben, die von der AwTrix automatisch durch die Anzeige geschoben werden, falls sie nicht auf das Display passen, Blinken, Fades, Farbwechsel... das sind alles Eigenschaften der Anzeige.

Die HA Flows sind kleine Hilfsroutinen, die unter HA solche statischen Anzeigen generieren, zyklisch oder bei Bedarf (Alarmzustände). In openHAB verwendest Du dafür eine Rule. z.B. Ladeanzeige für das BEV:

Code: Alles auswählen

rule "BEV Batterie SOC" // my-31
 when
    Item BevChargeSOC changed or
    Item BevChargeStatState changed or
    Item BevParkingPosition changed
 then
    var strColor = "#FF0000"
    var strIcon  = "53423"
    switch(BevChargeStatState.state.toString) {
        case                               "not_ready_for_charging" :   strColor = "#FF7070"
        case                                   "ready_for_charging" :   strColor = "#60AF80"
        case                                             "charging" : { strColor = "#00FF00" strIcon = "53424" }
        case              "charge_purpose_reached_and_conservation" :   strColor = "#0000FF"
        case "charge_purpose_reached_and_not_conservation_charging" :   strColor = "#FFFFFF"
        case                                  "notReadyForCharging" :   strColor = "#FF7070"
        case                                     "readyForCharging" :   strColor = "#60AF80"
        case                  "chargePurposeReachedAndConservation" :   strColor = "#0000FF"
        case       "chargePurposeReachedAndNotConservationCharging" :   strColor = "#FFFFFF"
        case                                         "conservation" :   strColor = "#7F7FFF"
    }
    val strSOC = BevChargeSOC.state.toString
    var json='{"pos" : 2,"text" : "' + strSOC + '","icon" : ' + strIcon + ',"duration" : 9,"color" : "' + strColor + '"}'
    if(bCarAway)
        json = ''
    AwTrixSchreibtischCar.sendCommand(json)
end
Die Rule wird gestartet, sobald eines der Items eine Änderung im Status erfährt.
Es werden zwei lokale Variablen definiert, welche das angezeigte Icon und die Schriftfarbe referenzieren (mit Defaultwert).
Anschließend wird abhängig vom Ladestatus die Farbe und evtl. das Icon angepasst.
Danach wird der aktuelle Ladestand ausgelesen.
Nun wird das JSON Objekt erstellt, welches die Anzeige füllt (die "App" generiert"). Abschließend wird die "App" in Richtung AwTrix geschickt, falls das Fahrzeug im Hof parkt, ansonsten wird die App gelöscht (bCarAway ist eine global definierte Variable, welche an anderer Stelle bei Änderung der Parkposition gesetzt wird).

Eine AwTrix App ist also nichts anderes als das JSON Objekt in der fünftletzten Zeile des Codes. Jedes Element des Objekts ist optional, welche Elemente zur Verfügung stehen kannst Du in der AwTrix Doku nachlesen :)
Das Item AwTrixSchreibtischCar ist logischerweise mit dem passenden Topic verlinkt, hier also awtrix3_1/custom/car.
Schickt man einen leeren String, so wird die App gelöscht, ansonsten muss man ein gültiges JSON Objekt mit den passenden Elementen schicken und erhält die Anzeige.

Ich verwende momentan nicht das AwTrix Addon von openHAB, sondern schreibe direkt in das passende mqtt Topic.
Wenn man das Adon verwendet, kann man für jedes Element der "App" ein eigenes Item anlegen (entspricht dann einem Element im JSON Objekt) und openHAB kümmert sich darum, das JSON zu generieren und passend an die Uhr zu senden. Ich hatte meine AwTrix aber schon lange vor dem Erscheinen des AwTrix Addons und das Erzeugen eines JSON Objekts "von Hand" erscheint mir einfach genug :)
openHAB5.1.3 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime - LXC, 4 Kerne, 3 GByte RAM)
Hostsystem Proxmox VE 9.1.6 - AMD Ryzen 5 3600 6 Kerne, 12 Threads - 64 GByte RAM - ZFS Pools: Raid Z1, 3 x 20 TB HDD -> 40 TByte und Raid Z0-Mirrored 4 x 1 TByte NVMe -> 2 TByte

Antworten