Spielzeug :)

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

Moderatoren: seppy, udo1toni

spirit
Beiträge: 17
Registriert: 28. Nov 2019 08:19
Answers: 0

Re: Spielzeug :)

Beitrag von spirit »

Dabei erscheint leider folgende Fehlermeldung :)

Code: Alles auswählen

2023-06-28 16:11:03.552 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'awtrixlight-3' failed: f != org.openhab.core.library.types.DecimalType in awtrixlight
Das Item wird durch folgende Rule mit Werten beliefert (2PV Anlagen werden addiert):

Code: Alles auswählen

rule "Stromerzeugung PV-Anlagen Heute"

when
Item Stromerzeugung_Heute_kWh received update or
Item OpenDTU_Erzeugung_Tag_kWh received update 
then
Stromerzeugung_PV_Gesamt_Heute_kWh.
postUpdate((Stromerzeugung_Heute_kWh.state as Number).floatValue + (OpenDTU_Erzeugung_Tag_kWh.state as Number).floatValue) 
end

Ausgangsitems:

Code: Alles auswählen

Number      OpenDTU_Erzeugung_Tag			"OpenDTU Erzeugung Tag [%.2f Wh]"      (OpenDTU)       {channel="mqtt:topic:Mosquitto:OpenDTU:erzeugungtag"}
Number      OpenDTU_Erzeugung_Tag_kWh		"OpenDTU Erzeugung Tag [%.2f kWh]"     (OpenDTU)
Number             Stromerzeugung_Heute_kWh             "Erzeugung Hausdach Heute [%.2f kWh]"               <energy>
openHAB 4.0.0 Milestone auf RPi 4 4GB

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

Re: Spielzeug :)

Beitrag von udo1toni »

Ok...? Bei mir funktioniert es. Allerdings komme ich von einem UoM Item. Also probiere es bitte mal so:

Code: Alles auswählen

 val strPower = String.format("%.1f",(newState as Number).floatValue)
Möglich wäre auch noch, dass es eine Änderung gegeben hat (Ähm... glaub nicht...), weil Du ja schon auf 4.0 bist. Wahrscheinlicher ist, dass openHAB den Datentyp nicht korrekt zuordnet, das sollte mit obiger Änderung dann passen.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

spirit
Beiträge: 17
Registriert: 28. Nov 2019 08:19
Answers: 0

Re: Spielzeug :)

Beitrag von spirit »

Das hat funktioniert :)

Gibts eine Möglichkeit das Komma durch einen Punkt zu ersetzen?
IMG_5266.jpeg
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
openHAB 4.0.0 Milestone auf RPi 4 4GB

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

Re: Spielzeug :)

Beitrag von udo1toni »

In dem Moment, wo es ein Text ist, sollte das gehen. Hänge einfach noc hein .replace(',','.') an

Code: Alles auswählen

 val strPower = String.format("%.1f",(newState as Number).floatValue).replace(',','.')
Sieht etwas seltsam aus...
replace() ersetzt alle Vorkommen des ersten Teilstrings durch den zweiten Teilstring, und zwar in dem übergebenen String - in diesem Fall das Ergebnis von String.format()
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

spirit
Beiträge: 17
Registriert: 28. Nov 2019 08:19
Answers: 0

Re: Spielzeug :)

Beitrag von spirit »

Das hat geklappt. Mega! Vielen Dank :)

Darauf wäre ich niemals gekommen..
openHAB 4.0.0 Milestone auf RPi 4 4GB

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

Re: Spielzeug :)

Beitrag von udo1toni »

:D
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

waywit
Beiträge: 11
Registriert: 13. Jun 2023 06:50
Answers: 0

Re: Spielzeug :)

Beitrag von waywit »

Hallo zusammen

vielen Dank nochmal für die ausführlichen Tipps hier im Forum... Ich glaub mir fehlt noch ein winzig kleiner Schritt um die gewünschten Werte auf meiner AwTrix anzuzeigen. Es funktioniert wunderbar mit API Client, ich habe mir das JSON komplett in OpenHAB zusammengebaut und logge dieses dann einfach mit logInfo. Leider kann ich es nicht über das http Binding Thing mit dem Channel versenden.

Code: Alles auswählen

UID: http:url:1cd268cb6b
label: Awtrix Light http
thingTypeUID: http:url
configuration:
  authMode: BASIC
  ignoreSSLErrors: false
  baseURL: http://w.x.y.z/api/
  delay: 0
  stateMethod: GET
  refresh: 30
  commandMethod: POST
  contentType: application/json
  timeout: 3000
  bufferSize: 2048
location: Wohnzimmer
channels:
  - id: solaranlage
    channelTypeUID: http:string
    label: Solaranlage
    description: ""
    configuration:
      mode: WRITEONLY
      commandExtension: custom?name=appname
      escapedUrl: false
Wie kann ich das erstellte JSON über das Thing/Channel an mein AwTrix schicken... ich glaube ich stehe irgendwie auf dem Schlauch :-(

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

Re: Spielzeug :)

Beitrag von udo1toni »

Da ist ein Slash zu viel. (zu Beginn der commandExtension)
Unter der Voraussetzung, dass das mit dem Channel http:url:1cd268cb6b:solaranlage verlinkte String Item das vollständige JSON Objekt als Befehl bekommt, sollte die Anzeige dann unter dem Namen appname eingebunden werden.

Sinnvoller wäre vermutlich diese commandExtension:

Code: Alles auswählen

commandExtension: custom?name=solar
ergibt als CommandURL dann

Code: Alles auswählen

http://w.x.y.z/api/custom?name=solar
und der Inhalt des Befehls geht als POST raus und wird entsprechend als custom App eingebunden.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

waywit
Beiträge: 11
Registriert: 13. Jun 2023 06:50
Answers: 0

Re: Spielzeug :)

Beitrag von waywit »

Hallo und vielen Dank

ja, den "/" hatte ich von meinen diversen verzweifelten Probierversuchen noch drin, hatte ich dann rausgenommen. Entschuldige die Verwirrung ;-)
Aktuell stehe ich in der Rule, dass ich mir das JSON zusammengebaut habe und per logInfo ins log schreibe. Wenn ich dieses JSON per RapidAPI zusammen mit den anderen Daten (aus Thing und Channel, also der gesamten URL) an meine AwTrix schicke wird die App aktualisiert und der Wert angezeigt.

ABER jetzt zu meiner (wahrscheinlich) doofen Frage... durch was muss ich den

Code: Alles auswählen

logInfo("AwTrix Solix Power", "JSON=" + json)
Eintrag ersetzen, dass OpenHAB die Variable "json" per http an meine AwTrix schickt :?:

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

Re: Spielzeug :)

Beitrag von udo1toni »

Du musst ein Item mit dem Channel verbinden.
Also Dein Thing:

Code: Alles auswählen

UID: http:url:1cd268cb6b
label: Awtrix Light http
thingTypeUID: http:url
configuration:
  authMode: BASIC
  ignoreSSLErrors: false
  baseURL: http://w.x.y.z/api/
  delay: 0
  stateMethod: GET
  refresh: 30
  commandMethod: POST
  contentType: application/json
  timeout: 3000
  bufferSize: 2048
location: Wohnzimmer
channels:
  - id: solaranlage
    channelTypeUID: http:string
    label: Solaranlage
    description: ""
    configuration:
      mode: WRITEONLY
      commandExtension: custom?name=solar
      escapedUrl: false
hat den string Channel http:url:1cd268cb6b:solaranlage und diesen Channel verbindest Du mit einem String Item, meinetwegen AwTrixSolar.

Und in der Rule verwendest Du dann den Befehl AwTrixSolar.sendCommand(json)

Übrigens: die Log-Befehle erwarten zwei Strings als Parameter, wobei aber der erste String nicht beliebigen Inhalt haben sollte, sondern am besten kurz und nur aus Buchstaben des englishcne Alphabets (und meinetwegen noch arabische Ziffern) bestehen sollte (sowie Unterstriche, Punkt und Minus).
Das ist ein Teil des Loggernamens. Der Loggername wird verwendet, um das Verhalten des Loggers zu steuern, und zwar während openHAB läuft. Man kann steuern, welche Level geloggt werden. Die Loggernamen sind hierarchisch aufgebaut.
OK wäre z.B. "awtrix.solix.power" oder auch "awtrixSolix_power", aber das ist alles viel zu lang. Erfahrungsgemäß möchte man hier kurze Namen, auch, weil dies nur ein Teil des Loggernamens ist. Für die Befehle

Code: Alles auswählen

logDebug("awtrix","Dies ist eine Debug Zeile")
logInfo("awtrix","Dies ist eine Info Zeile")
logWarn("awtrix","Dies ist eine Warn Zeile")
logError("awtrix","Dies ist eine Error Zeile")
wäre der vollständige Name z.B. org.openhab.core.model.script.awtrix. Und über den in der Karaf Konsole gesendeten Befehl

Code: Alles auswählen

log:set ERROR org.openhab.core.model.script.awtrix
kann man dafür sorgen, dass nur noch die letzte Zeile geloggt wird (wie gesagt, im laufenden Betrieb)
openHAB4 erlaubt (mindestens teilweise) auch über die UI Zugriff auf die Log Level - ob das auch für das Rule Logging gilt, weiß ich nicht, aber bereits eingebaute Log Befehle zu aktivieren oder zu deaktivieren ist während der Entwicklung von Rules ja eine Sache, die man locker auch über Texteingaben erreichen kann.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten