Seite 1 von 1

chargemode per MQTT ändern in openWb 2.0

Verfasst: Do Mär 09, 2023 6:59 am
von suggarman
Hallo,
ich steuere die openWB auch über openhab.
Es klappt problemlos den Ladestrom, die Ladeleistung und den SoC des Autos per MQTT auszulesen.

Unter 1.9 ging die Änderung das Lademodus so:

if (Lademodus_owb.state==0) { sendHttpGetRequest("http://192.168.1.152/openWB/web/api.php ... s="+"jetzt") }
if (Lademodus_owb.state==1) { sendHttpGetRequest("http://192.168.1.152/openWB/web/api.php ... +"minundpv") }
if (Lademodus_owb.state==2) { sendHttpGetRequest("http://192.168.1.152/openWB/web/api.php ... uberschuss") }
if (Lademodus_owb.state==3) { sendHttpGetRequest("http://192.168.1.152/openWB/web/api.php ... us="+"stop") }

Wie geht das unter 2.0?

Danke und Grüße
Stefan

Re: chargemode per MQTT ändern in openWb 2.0

Verfasst: Do Mär 09, 2023 8:56 am
von svenrill
Hallo Stefan,

ich nutze MQTT zum Auslesen und Setzen in openHAB, d.h. einen MQTT-Channel mit den entsprechenden topics.
Zum Beispiel für den Lademodus basierend auf dem Ladeprofil des Fahrzeuges (die 1 steht für den Index des Profils, Standard-Profil sollte 0 sein):

MQTT State Topic: openWB/vehicle/template/charge_template/1
MQTT Command Topic: openWB/set/vehicle/template/charge_template/1/chargemode/selected

Den State parse ich bei "Incoming Value Transformations" mit "JSONPATH:$.chargemode.selected".
Der Command erwartet "instant_charging", "pv_charging" oder "stop".

Damit kannst Du das Item des Channels direkt ansprechen und den entsprechenden Wert setzen oder auslesen, z.B. mit sendCommand() oder über die sitemap in der App.

Ich weiß nicht, ob es eine Doku der MQTT set-Befehle gibt. Wenn Du z.B. mit MQTT-Explorer die topics beobachtest und in der Webanwendung die Einstellung änderst, tauchen kurz die MQTT-Befehle auf. Im MQTT.log von openWB 2 müssten sie auch zu finden sein.

set für die Begrenzung des Sofort-Lademodus wäre z.B.:
openWB/set/vehicle/template/charge_template/1/chargemode/instant_charging/limit/selected

Viele Grüße
Sven

Re: chargemode per MQTT ändern in openWb 2.0

Verfasst: Mi Mär 15, 2023 8:51 am
von suggarman
Hallo Sven,

vielen Dank für deine sehr ausführliche Antwort. Seit deinem post habe ich schon einige Stunden vergeblich probiert :(

things:
Type string : chargemodestringread "chargemodestringread" [stateTopic="openWB/vehicle/template/charge_template/0"] // funktioniert

Type string : chargemodestringewrite "chargemodestringwrite" commandTopic="openWB/vehicle/template/charge_template/0/chargemode/selected"] // geht NICHT


items:
String Lademodus_mqtt_owb "[JSONPATH($.chargemode.selected):%s ]" (AutoSolar) { channel="mqtt:topic:openwb:chargemodestringread" }
String Lademodus_Sendebefehl_mqtt { channel="mqtt:topic:openwb:chargemodestringewrite" }


rule:
postUpdate(Lademodus_Sendebefehl_mqtt,"instant_charging")

Hast du eine Idee, wo es hängt?
Es gibt keinen Fehler aber der Lademode wird nicht geändert.

Danke und Grüße
Stefan

Re: chargemode per MQTT ändern in openWb 2.0

Verfasst: Mi Mär 15, 2023 11:45 am
von svenrill
Hallo Stefan,

ich glaube mein postUpdate()-Hinweis ist Schuld.
Probier es mit sendCommand(). Ich habe es nachgestellt, aber etwas vereinfacht. Du brauchst eigentlich nur einen Channel in dem MQTT-Thing. Bei mir sieht das als Code so aus:

Code: Alles auswählen

- id: testChargeMode
   channelTypeUID: mqtt:string
   label: test chargemode
   description: ""
   configuration:
     commandTopic: openWB/set/vehicle/template/charge_template/0/chargemode/selected
     stateTopic: openWB/vehicle/template/charge_template/0
Für diesen Channel ein Item Lademodus_mqtt_owb anlegen, welches die JSONPATH-Transformation ($.chargemode.selected) macht.

Dann ändert sendCommand(Lademodus_mqtt_owb, "instant_charging") bei mir die Einstellung in openWB.

Viele Grüße
Sven

Re: chargemode per MQTT ändern in openWb 2.0

Verfasst: Mi Mär 15, 2023 12:03 pm
von suggarman
Mit sendCommand geht es tatsächlich genau so, wie ich es habe :lol:

Danke für deine Hilfe.

Re: chargemode per MQTT ändern in openWb 2.0

Verfasst: Fr Mär 17, 2023 12:01 pm
von suggarman
Ich stelle fest, dass MQTT, JASONPATH und ich nicht wirklich Freunde sind :lol:

Falls noch jemand mit der Integration der openWB2 in openhab kämpft, stelle ich hier ein paar Codeschnipsel rein:

Things:
Bridge mqtt:broker:openwbbroker "OpenWBBroker" [ host="192.168.1.173", secure=false, clientID="openhabian",port=1883, username="",password=""]

Thing mqtt:topic:openwb "OpenWB" (mqtt:broker:openwbbroker) {

Channels:
Type number : ladeleistung "Ladeleistung" [stateTopic="openWB/lp/1/W",unit="W"]
Type number : ladestrom "Ladestrom" [stateTopic="openWB/lp/1/APhase1",unit="A"]
Type number : teslasoc "Tesla SoC" [stateTopic="openWB/vehicle/2/get/soc",unit="%"]
Type number : plugstate "plugstate" [stateTopic="openWB/lp/1/boolPlugStat",unit=""]
Type string : chargemode "chargemode" [ stateTopic="openWB/vehicle/template/charge_template/0", commandTopic="openWB/set/vehicle/template/charge_template/0/chargemode/selected"]
Type string : pvmincurrent "pvmincurrent" [ stateTopic="openWB/vehicle/template/charge_template/0", commandTopic="openWB/set/vehicle/template/charge_template/0/chargemode/pv_charging/min_current"]
Type string : sofortcurrent "sofortcurrent" [ stateTopic="openWB/vehicle/template/charge_template/0", commandTopic="openWB/set/vehicle/template/charge_template/0/chargemode/instant_charging/current"]

Items:
String Lademodus_mqtt_owb "[JSONPATH($.chargemode.selected):%s ]" { channel="mqtt:topic:openwb:chargemode" }
String Lademodus_Sendebefehl_mqtt { channel="mqtt:topic:openwb:chargemode" }
Number Lademodus_owb "Lademodus openWB [%.0f]" // [MAP(pvev.map):%s]
Number Ladestrom_owb "aktueller Ladestrom (A) : [%s]" { channel="mqtt:topic:openwb:ladestrom" } //http:url:openWB152_thing:lla1" }
Number Ladeleistung_owb "Ladeleistung [%.0f W]" { channel="mqtt:topic:openwb:ladeleistung" } //http:url:openWB152_thing:mqttladeleistunglp1" }
Number Ladestecker_owb "Status Ladestecker [%s]" { channel="mqtt:topic:openwb:plugstate" } //http:url:openWB152_thing:SteckerLP1" }
String pvmincurrent "[JSONPATH($.chargemode.pv_charging.min_current):%s ]" { channel="mqtt:topic:openwb:pvmincurrent" } // (AutoSolar)
String sofortcurrent "[JSONPATH($.chargemode.instant_charging.current):%s ]" { channel="mqtt:topic:openwb:sofortcurrent" } // (AutoSolar)
String pvmincurrent_Sendebefehl { channel="mqtt:topic:openwb:pvmincurrent" }
Number LadestromPVmin
String sofortcurrent_Sendebefehl { channel="mqtt:topic:openwb:sofortcurrent" }
Number Ladestrom_sofort // (AutoSolar)
Number Tesla_SOC "Tesla SoC [%s]" { channel="mqtt:topic:openwb:teslasoc"} //"http:url:openWB152_thing:soc" }

Rules:

rule "openWB 2.0 Lademodus setzen"
when
Item Lademodus_owb received update
then
if (Lademodus_owb.state==0) {
sendCommand(Lademodus_Sendebefehl_mqtt,"instant_charging")
sendCommand(Echo_TTS,"Lademodus sofort") }
if (Lademodus_owb.state==1) {
sendCommand(Lademodus_Sendebefehl_mqtt,"pv_charging")
sendCommand(Echo_TTS,"Lademodus PV Minimum ")
sendCommand(pvmincurrent_Sendebefehl,"6")}
if (Lademodus_owb.state==2) {
sendCommand(Lademodus_Sendebefehl_mqtt,"pv_charging")
sendCommand(Echo_TTS,"Lademodus PV")
sendCommand(pvmincurrent_Sendebefehl,"0") }
if (Lademodus_owb.state==3) {
sendCommand(Lademodus_Sendebefehl_mqtt,"stop")
sendCommand(Echo_TTS,"Lademodus stop")}
end




rule "Ladestrom PV min setzen"
when
Item LadestromPVmin received update
then
if (LadestromPVmin.state==6) {sendCommand(pvmincurrent_Sendebefehl,"6")}
if (LadestromPVmin.state==7) {sendCommand(pvmincurrent_Sendebefehl,"7")}
if (LadestromPVmin.state==8) {sendCommand(pvmincurrent_Sendebefehl,"8")}
if (LadestromPVmin.state==9) {sendCommand(pvmincurrent_Sendebefehl,"9")}
if (LadestromPVmin.state==10) {sendCommand(pvmincurrent_Sendebefehl,"10")}
if (LadestromPVmin.state==11) {sendCommand(pvmincurrent_Sendebefehl,"11")}
if (LadestromPVmin.state==12) {sendCommand(pvmincurrent_Sendebefehl,"12")}
if (LadestromPVmin.state==13) {sendCommand(pvmincurrent_Sendebefehl,"13")}
if (LadestromPVmin.state==14) {sendCommand(pvmincurrent_Sendebefehl,"14")}
if (LadestromPVmin.state==15) {sendCommand(pvmincurrent_Sendebefehl,"15")}
if (LadestromPVmin.state==16) {sendCommand(pvmincurrent_Sendebefehl,"16")}
end



rule "Ladestrom sofort setzen"
when
Item Ladestrom_sofort received update
then
if (Ladestrom_sofort.state==6) {sendCommand(sofortcurrent_Sendebefehl,"6")}
if (Ladestrom_sofort.state==7) {sendCommand(sofortcurrent_Sendebefehl,"7")}
if (Ladestrom_sofort.state==8) {sendCommand(sofortcurrent_Sendebefehl,"8")}
if (Ladestrom_sofort.state==9) {sendCommand(sofortcurrent_Sendebefehl,"9")}
if (Ladestrom_sofort.state==10) {sendCommand(sofortcurrent_Sendebefehl,"10")}
if (Ladestrom_sofort.state==11) {sendCommand(sofortcurrent_Sendebefehl,"11")}
if (Ladestrom_sofort.state==12) {sendCommand(sofortcurrent_Sendebefehl,"12")}
if (Ladestrom_sofort.state==13) {sendCommand(sofortcurrent_Sendebefehl,"13")}
if (Ladestrom_sofort.state==14) {sendCommand(sofortcurrent_Sendebefehl,"14")}
if (Ladestrom_sofort.state==15) {sendCommand(sofortcurrent_Sendebefehl,"15")}
if (Ladestrom_sofort.state==16) {sendCommand(sofortcurrent_Sendebefehl,"16")}
if (Ladestrom_sofort.state==17) {sendCommand(sofortcurrent_Sendebefehl,"17")}
if (Ladestrom_sofort.state==18) {sendCommand(sofortcurrent_Sendebefehl,"18")}
if (Ladestrom_sofort.state==19) {sendCommand(sofortcurrent_Sendebefehl,"19")}
if (Ladestrom_sofort.state==20) {sendCommand(sofortcurrent_Sendebefehl,"20")}
if (Ladestrom_sofort.state==21) {sendCommand(sofortcurrent_Sendebefehl,"21")}
if (Ladestrom_sofort.state==22) {sendCommand(sofortcurrent_Sendebefehl,"22")}
if (Ladestrom_sofort.state==23) {sendCommand(sofortcurrent_Sendebefehl,"23")}
if (Ladestrom_sofort.state==24) {sendCommand(sofortcurrent_Sendebefehl,"24")}
if (Ladestrom_sofort.state==25) {sendCommand(sofortcurrent_Sendebefehl,"25")}
if (Ladestrom_sofort.state==26) {sendCommand(sofortcurrent_Sendebefehl,"26")}
if (Ladestrom_sofort.state==27) {sendCommand(sofortcurrent_Sendebefehl,"27")}
if (Ladestrom_sofort.state==28) {sendCommand(sofortcurrent_Sendebefehl,"28")}
if (Ladestrom_sofort.state==29) {sendCommand(sofortcurrent_Sendebefehl,"29")}
if (Ladestrom_sofort.state==30) {sendCommand(sofortcurrent_Sendebefehl,"30")}
if (Ladestrom_sofort.state==31) {sendCommand(sofortcurrent_Sendebefehl,"31")}
if (Ladestrom_sofort.state==32) {sendCommand(sofortcurrent_Sendebefehl,"32")}
end

Sitemap:
Selection item=Lademodus_owb label="Lademodus [%s]" icon="sun_clouds" mappings=[0.0="sofort", 1.0="min + PV", 2.0="nur PV", 3.0="stop",4.0="opt. Netz"]
Setpoint item=Ladestrom_sofort label="Ladestrom sofort [%.0f A]" icon="ampere" step=1 minValue=6 maxValue=30 visibility=[Lademodus_owb == "0.0"]
Setpoint item=LadestromPVmin label="Ladestrom PV min [%.0f A]" icon="ampere" step=1 minValue=6 maxValue=16 visibility=[Lademodus_owb == "1.0"]

Ich hoffe, dass das hilfreich sein könnte.
Den 4.0="opt. Netz" gibt es in der openWB nicht. Hiermit habe ich rules um mit Tibber in den optimalen Zeiten zu laden.

Re: chargemode per MQTT ändern in openWb 2.0

Verfasst: Do Apr 06, 2023 10:46 am
von Christoph11
Hallo zusammen,

versuche ebenfalls Werte von Openhab nach der Openwb (1.9.295) zu senden.
Werte empfange klappt ohne Probleme nur bei senden tue ich mich noch schwer.

Wie habt Ihr die MQTT Command Topic erhalten???

Wenn ich mit dem MQTT Explorer schaue bekomme ich set und dann graph (Siehe Bild), abere nicht die Command Einträge.

Wo und wie finde ich die MQTT.log von openWB?

Oder ist das nur unter der Version 2.0 möglich?

Gruß
Christoph

Re: chargemode per MQTT ändern in openWb 2.0

Verfasst: Do Apr 06, 2023 12:09 pm
von hominidae
...die set Topics musst Du selbst publishen. Die openWB als Subscriber wird diese, nach erfolgreicher Bearbeitung wieder löschen. Daher sind die im Broker i.d.R. leer.

Es gibt (sollte geben) im Prinzip zu jedem Topic, das die openWB publiziert und das einen einstellbaren Parameter beinhaltet (quasi "get") ein korrespondierendes "set" topic.

Der globale Charge-Mode ist hier: openWB/set/ChargeMode

Re: chargemode per MQTT ändern in openWb 2.0

Verfasst: Do Apr 06, 2023 12:16 pm
von LutzB
Bitte 1.9 und 2.0 nicht mischen. Es gibt nicht ohne Grund zwei getrennte Unterforen.

Für Fragen zur 1.9 bitte dort posten.

Danke