Spielzeug :)
- udo1toni
- Beiträge: 15678
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Spielzeug :)
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)
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
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
Re: Spielzeug :)
Wie machst Du das denn?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.
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
Re: Spielzeug :)
Das habe ich mit dem Mail Binding realisiert.Wie machst Du das denn?
IMAP fragt alle 30 minuten den account ab.
Der Ordnername heisst:
Code: Alles auswählen
InboxGruss mad-mike
openHABian 5.1.3 auf Raspberry Pi 4 Mod. b (8GB)
openHABian 5.1.3 auf Raspberry Pi 4 Mod. b (8GB)
-
mad-mike
- Beiträge: 510
- Registriert: 6. Jan 2021 18:05
Re: Spielzeug :)
Perfekt, DankeDu musst einfach die App "leeren", also ein "" als Payload schicken.
Gruss mad-mike
openHABian 5.1.3 auf Raspberry Pi 4 Mod. b (8GB)
openHABian 5.1.3 auf Raspberry Pi 4 Mod. b (8GB)
-
mad-mike
- Beiträge: 510
- Registriert: 6. Jan 2021 18:05
Re: Spielzeug :)
Wie kann man denn 2 werte berechnen, welche in der "IF" stehen?
folgende Ausgangs situation:
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
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)
endCode: Alles auswählen
<90Code: Alles auswählen
<60Grund: 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 mad-mike
openHABian 5.1.3 auf Raspberry Pi 4 Mod. b (8GB)
openHABian 5.1.3 auf Raspberry Pi 4 Mod. b (8GB)
- udo1toni
- Beiträge: 15678
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Spielzeug :)
Ich bin mir nicht sicher, ob ich die Aufgabenstellung korrekt erfasst habe, aber hier ein dynamisches "Angebot":
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...
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)
endDas erhoffte
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
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
Re: Spielzeug :)
Funktioniert perfekt.
Habe zum testen einfach mal ein
abgesetzt.
Ging auch gleich der Wechselrichter in Standby
.
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...
Habe zum testen einfach mal ein
Code: Alles auswählen
SOC.postUpdate(-1)Ging auch gleich der Wechselrichter in Standby
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 erreichtGruss mad-mike
openHABian 5.1.3 auf Raspberry Pi 4 Mod. b (8GB)
openHABian 5.1.3 auf Raspberry Pi 4 Mod. b (8GB)
- udo1toni
- Beiträge: 15678
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Spielzeug :)
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
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
Re: Spielzeug :)
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
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
- udo1toni
- Beiträge: 15678
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Spielzeug :)
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:
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
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)
endEs 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
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