Erstmal vielen Dank für die Antwort. Das hat mir schon geholfen und ich habe wieder etwas dazugelernt
Ich habe es damit tatsächlich hinbekommen die Öffnungszeit in Sekunde zu setzen. Damit öffnet das Ventil sofort bis zum Ablauf der angegebenen Zeit. Damit kann ich also diesen Wert auslesen und setzen.
Hier der Code dazu
Den Status des Ventils kann ich auch auslesen.
Leider verstehe ich noch nicht wie ich es direkt öffnen/schließen kann bzw. wie das Publis dafür aussieht.
Das ging unter dem Host-Tpe "Home-Assistant" recht einfach. Setze ich das Ventil auf ON wurde es für eine vordefiniert Dauer aktiviert. Fertig.
Folgend mein Zwischenergebnis bzw. der Code für den 'Switch' (das formatBeforePublish war nur ein Versuch, funktioniert so leider nicht)
In der Dokmentation von LinklTap ist leider nur das setzen der 'duration' under cmd 6 beschrieben. Was es da noch für Varianten gibt (z.B. vielleicht auch das Setzten der Sollwassermenge etc) erschließt sich mir aktuell nicht. Oder ich bin einfach nicht erfahren genug daraus andere Möglichkeiten abzuleiten Ich habe LinkTap mal angeschrieben. Mal sehen was die Antworten.
Viele Grüße,
Andreas
LinkTap Bewässerungscomputer und Flow Meter via MQTT integrieren
-
- Beiträge: 6
- Registriert: 25. Jun 2022 19:49
Re: LinkTap Bewässerungscomputer und Flow Meter via MQTT integrieren
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
-
- Beiträge: 56
- Registriert: 26. Mär 2022 18:15
Re: LinkTap Bewässerungscomputer und Flow Meter via MQTT integrieren
Hallo Andreas,
nach einem Jahr Betrieb hier ein paar Gedanken zu meiner Umsetzung:
- Für die Steuerung des Ventils (Switch "_water_switch") und für den Bewässerungsstatus ("_is_watering") nutze ich ebenso die MQTT Home Assistant vordefinierten Channels
- Die Status von Fall-, Broken-, Cutoff-, Leak- und Clog-Alarm hole ich mir mittels Generic MQTT Thing. Weitere Channels nutze ich derzeit nicht.
- Für die tägliche Bewässerung habe ich Bewässerungspläne mit 4 Intervallen direkt in der LinkTap App erstellt (Vorteil: Anpassung der Bewässerung auf Basis der Tages-Temperatur und Wettervorhersage einfach möglich). Natürlich wäre das auch über OpenHab programmierbar, war mir dann aber doch zu komplex.
- Ich habe Froggit Bodenfeuchtesensoren mittels FineoffsetWeather in Openhab integriert. Meldet einer eine Bodenfeuchte <x% 6h (6h ist der Forecast-Wert, den ich in der LinkTap App eingestellt habe) nach dem geplanten Bewässerungsintervall, starte ich über eine Rule für y Minuten die Bewässerung => Channel "_water_switch" geht für y Minuten auf ON => Sicherheitsebene, sollte die Wettervorhersage von Linktap doch mal nicht stimmen, kein/wenig Regen gekommen sein und ein Bewässerungszyklus übersprungen wurde
- Bewässerungshistorie sehe ich ebenso über die Linktap App ein (sehr übersichtlich aufgebaut, auch CSV-Export möglich)
Grüße
neuling10
nach einem Jahr Betrieb hier ein paar Gedanken zu meiner Umsetzung:
- Für die Steuerung des Ventils (Switch "_water_switch") und für den Bewässerungsstatus ("_is_watering") nutze ich ebenso die MQTT Home Assistant vordefinierten Channels
- Die Status von Fall-, Broken-, Cutoff-, Leak- und Clog-Alarm hole ich mir mittels Generic MQTT Thing. Weitere Channels nutze ich derzeit nicht.
- Für die tägliche Bewässerung habe ich Bewässerungspläne mit 4 Intervallen direkt in der LinkTap App erstellt (Vorteil: Anpassung der Bewässerung auf Basis der Tages-Temperatur und Wettervorhersage einfach möglich). Natürlich wäre das auch über OpenHab programmierbar, war mir dann aber doch zu komplex.
- Ich habe Froggit Bodenfeuchtesensoren mittels FineoffsetWeather in Openhab integriert. Meldet einer eine Bodenfeuchte <x% 6h (6h ist der Forecast-Wert, den ich in der LinkTap App eingestellt habe) nach dem geplanten Bewässerungsintervall, starte ich über eine Rule für y Minuten die Bewässerung => Channel "_water_switch" geht für y Minuten auf ON => Sicherheitsebene, sollte die Wettervorhersage von Linktap doch mal nicht stimmen, kein/wenig Regen gekommen sein und ein Bewässerungszyklus übersprungen wurde
- Bewässerungshistorie sehe ich ebenso über die Linktap App ein (sehr übersichtlich aufgebaut, auch CSV-Export möglich)
Grüße
neuling10
-
- Beiträge: 6
- Registriert: 25. Jun 2022 19:49
Re: LinkTap Bewässerungscomputer und Flow Meter via MQTT integrieren
Hallo,
ich habe ein wenig Zeit gebraucht da ich in Urlaub war und die Familie Vorrang vor Openhab hat.
Dank der Infos hier und auch von LinkTap (die Antworten wirklich schnell) bin ich nun an mein Ziel gekommen. Danke hier an alle.
@Neuling10: Ich habe einen ähnlichen Ansatz wie Du. Die ausführlicher Einrichtung/Parametrierung mache ich auch in der LinkTap-App. Das geht dort sehr gut und ich wollte das Rad in OpenHab nicht neu erfinden.
Falls irgendwer mal über das gleiche Thema stolpert, hier mein Lösungsansatz ohne den Weg über Homeassistant. Ich hoffe es hilft bei Bedarf den Ein oder Anderen ein wenig weiter. Der Code hat mit Sicherheit Verbesserungspotential (bin kein Openhab Programmier-Experte)
Ich habe ein LinkTap D1. Das hat zwei Ventile mit Durchflussmessung. Bei meiner Parametrierung stellt jedes Ventil ein Device dar.
Gateway und Device haben eine eindeutige ID. Diese habe ich hier mal mit xxxxxxxxxx für die Gateway-ID und yyyyyyyyyy_1 für die Device-ID des ersten Ventils dargestellt (yyyyyyyyyy_2 wäre die des zweiten Ventils). Diese Angaben müssen natürlich bei jedem angepasst werden. Hier lohnt es sich ein MQTT-Explorer zu verwenden. Damit bekommt man die ID's einfach raus.
Folgend der Code für ein Device...
So sieht meine Sitemap am Ende aus: Das LinKTab-Gateway ist in meinem Fall als MQTT-Client eingerichtet (ich gehe hier aber nicht auf die Einrichtung des MQTT-Brokers ein. Das sprengt den Rahmen) Für jedes Device habe ich in Openhab dann ein 'Generic MQTT Thing' angelegt. Für das erste Device/Ventil habe ich folgende Channels angelegt:
Nun die Items (Sorry, ich lege Items noch immer in einer Text-Datei an)
dazu habe ich folgende Rule:
So, ich hoffe ich hab nix übersehen und viel Spaß beim Bewässern mit LinkTap
Viele Grüße,
Andreas
ich habe ein wenig Zeit gebraucht da ich in Urlaub war und die Familie Vorrang vor Openhab hat.
Dank der Infos hier und auch von LinkTap (die Antworten wirklich schnell) bin ich nun an mein Ziel gekommen. Danke hier an alle.
@Neuling10: Ich habe einen ähnlichen Ansatz wie Du. Die ausführlicher Einrichtung/Parametrierung mache ich auch in der LinkTap-App. Das geht dort sehr gut und ich wollte das Rad in OpenHab nicht neu erfinden.
Falls irgendwer mal über das gleiche Thema stolpert, hier mein Lösungsansatz ohne den Weg über Homeassistant. Ich hoffe es hilft bei Bedarf den Ein oder Anderen ein wenig weiter. Der Code hat mit Sicherheit Verbesserungspotential (bin kein Openhab Programmier-Experte)
Ich habe ein LinkTap D1. Das hat zwei Ventile mit Durchflussmessung. Bei meiner Parametrierung stellt jedes Ventil ein Device dar.
Gateway und Device haben eine eindeutige ID. Diese habe ich hier mal mit xxxxxxxxxx für die Gateway-ID und yyyyyyyyyy_1 für die Device-ID des ersten Ventils dargestellt (yyyyyyyyyy_2 wäre die des zweiten Ventils). Diese Angaben müssen natürlich bei jedem angepasst werden. Hier lohnt es sich ein MQTT-Explorer zu verwenden. Damit bekommt man die ID's einfach raus.
Folgend der Code für ein Device...
So sieht meine Sitemap am Ende aus: Das LinKTab-Gateway ist in meinem Fall als MQTT-Client eingerichtet (ich gehe hier aber nicht auf die Einrichtung des MQTT-Brokers ein. Das sprengt den Rahmen) Für jedes Device habe ich in Openhab dann ein 'Generic MQTT Thing' angelegt. Für das erste Device/Ventil habe ich folgende Channels angelegt:
Code: Alles auswählen
channels:
- id: LinkTap01_1_battery
channelTypeUID: mqtt:number
label: LinkTap01_1_battery
description: ""
configuration:
stateTopic: /linktap/up_cmd/yyyyyyyyyy_1
transformationPattern: JSONPATH:$.dev_stat.battery
unit: "%"
- id: LinkTap01_1_signal
channelTypeUID: mqtt:number
label: LinkTap01_1_signal
description: ""
configuration:
stateTopic: /linktap/up_cmd/yyyyyyyyyy_1
transformationPattern: JSONPATH:$.dev_stat.signal
unit: "%"
- id: LinkTap01_1_remain_duration
channelTypeUID: mqtt:number
label: LinkTap01_1_remain_duration
description: ""
configuration:
stateTopic: /linktap/up_cmd/yyyyyyyyyy_1
transformationPattern: JSONPATH:$.dev_stat.remain_duration
unit: s
- id: LinkTap01_1_volume
channelTypeUID: mqtt:number
label: LinkTap01_1_volume
description: null
configuration:
stateTopic: /linktap/up_cmd/yyyyyyyyyy_1
transformationPattern: JSONPATH:$.dev_stat.volume
unit: l
- id: LinkTap01_1_flowrate
channelTypeUID: mqtt:number
label: LinkTap01_1_flowrate
description: null
configuration:
stateTopic: /linktap/up_cmd/yyyyyyyyyy_1
transformationPattern: JSONPATH:$.dev_stat.speed
unit: l
- id: LinkTap01_1_iswatering
channelTypeUID: mqtt:switch
label: LinkTap01_1_iswatering
description: null
configuration:
stateTopic: /linktap/up_cmd/yyyyyyyyyy_1
transformationPattern: JSONPATH:$.dev_stat.is_watering
off: "false"
on: "true"
- id: LinkTap01_1_startwartering_flowrate
channelTypeUID: mqtt:number
label: LinkTap01_1_startwartering_flowrate
description: null
configuration:
commandTopic: /linktap/down_cmd
formatBeforePublish: '{"cmd" : 6,"gw_id" : "xxxxxxxxxx","dev_id" :
"yyyyyyyyyy_1","duration":%d}'
stateTopic: /linktap/up_cmd/yyyyyyyyyy_1
transformationPattern: JSONPATH:$.dev_stat.total_duration
- id: LinkTap01_1_stopwartering
channelTypeUID: mqtt:switch
label: LinkTap01_1_stopwatering
description: null
configuration:
formatBeforePublish: '{"cmd" : 7,"gw_id" : "xxxxxxxxxx","dev_id" :
"yyyyyyyyyy_1"}'
commandTopic: /linktap/down_cmd
Code: Alles auswählen
String LinkTap01_1_action "Wasser Start/Stop" <faucet>
Switch LinkTap01_1_iswatering "Bewässerung" <faucet> { channel="mqtt:topic:a64cwfwefw:LinkTap01_1_iswatering" }
Number LinkTap01_1_target_time "Vorgabzeit [JS(sec2hms.js):%s]" <time> { channel="mqtt:topic:a64cwfwefw:LinkTap01_1_startwartering_flowrate" }
Number LinkTap01_1_remain_duration "Restlaufzeit [JS(sec2hms.js):%s]" <time> { channel="mqtt:topic:a64cwfwefw:LinkTap01_1_remain_duration"}
Number LinkTap01_1_volume "Gesamtabgabe [%.1f Ltr]" <bottle> { channel="mqtt:topic:a64cwfwefw:LinkTap01_1_volume"}
Number LinkTap01_1_speed "Durchfluss [%.1f Ltr/min]" <flow> { channel="mqtt:topic:a64cwfwefw:LinkTap01_1_flowrate"}
Number LinkTap01_1_battery "Batterie [%d %%]" <battery> {channel="mqtt:topic:a64cwfwefw:LinkTap01_1_battery"}
Number LinkTap01_1_signal "Signal [%d %%]" <network> {channel="mqtt:topic:a64cwfwefw:LinkTap01_1_signal"}
Code: Alles auswählen
//==========================================================================
// Aktionsknopf zurücksetzten
//==========================================================================
rule "Action 1 zuruecksetzen"
when
Item LinkTap01_1_iswatering changed
then
LinkTap01_1_action.sendCommand("")
end
//==========================================================================
// Entsprechend der gewählten Aktion Ventil oeffnen bzw. schließen
//==========================================================================
rule "Wasser Links Ein/Aus"
when
Item LinkTap01_1_action changed
then
// Ventil oeffnen fuer n Sekunden
if (LinkTap01_1_action.state == "START")
{
LinkTap01_1_target_time.sendCommand(3600)
}
// Ventil schließen
if (LinkTap01_1_action.state == "STOP")
{
val mqttActions = getActions("mqtt","mqtt:broker:579z6dc338")
mqttActions.publishMQTT("/linktap/down_cmd", '{"cmd":7,"gw_id":"xxxxxxxxxx","dev_id":"yyyyyyyyyy_1"}');
}
end
Viele Grüße,
Andreas
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
- udo1toni
- Beiträge: 13989
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: LinkTap Bewässerungscomputer und Flow Meter via MQTT integrieren
Die Rules sind in der Form unnötig kompliziert.
Das String Item LinkTap01_1_action ist ein ungebundenes Item. Es dient also nur dazu, Vorgänge in openHAB zu steuern. Die UI löst jedes Mal, wenn dort ein Item beeinflusst wird, ein Command aus. Auf dem Bus tritt dann also das Event received command auf. Entsprechend reicht eine Rule:
Das Rücksetzen des Knopfes kann also direkt erfolgen, und dabei wird die Rule nicht nochmal getriggert (im Gegensatz zur Variante über changed)
Was mich etwas irritiert: Wenn Du schon einen Channel für den STOPP-Befehl angelegt hast, warum nutzt Du den denn nicht?
Das String Item LinkTap01_1_action ist ein ungebundenes Item. Es dient also nur dazu, Vorgänge in openHAB zu steuern. Die UI löst jedes Mal, wenn dort ein Item beeinflusst wird, ein Command aus. Auf dem Bus tritt dann also das Event received command auf. Entsprechend reicht eine Rule:
Code: Alles auswählen
//==========================================================================
// Entsprechend der gewählten Aktion Ventil oeffnen bzw. schließen
//==========================================================================
rule "Wasser Links Ein/Aus"
when
Item LinkTap01_1_action received command
then
val strStop = '{"cmd":7,"gw_id":"xxxxxxxxxx","dev_id":"yyyyyyyyyy_1"}' // Stopp-Befehl
switch(receivedCommand.toString) {
case "START" : // Ventil öffnen
LinkTap01_1_target_time.sendCommand(3600) // für eine Stunde
case "STOP" : { // Ventil schließen
val mqttActions = getActions("mqtt","mqtt:broker:579z6dc338") // Handle holen
mqttActions.publishMQTT("/linktap/down_cmd", strStop) // Befehl senden
}
}
LinkTap01_1_action.postUpdate("") // Item leeren
end
Was mich etwas irritiert: Wenn Du schon einen Channel für den STOPP-Befehl angelegt hast, warum nutzt Du den denn nicht?
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 6
- Registriert: 25. Jun 2022 19:49
Re: LinkTap Bewässerungscomputer und Flow Meter via MQTT integrieren
Hallo,
>Was mich etwas irritiert: Wenn Du schon einen Channel für den STOPP-Befehl angelegt hast, warum nutzt Du den denn nicht?
Das war ein überbleibsel auf einem ersten Versuch, den ich so nicht mehr benötige.
Vielen Dank,
Andreas
Danke für den wertvollen Hinweis. Habe ich gleich umgesetzt.Die Rules sind in der Form unnötig kompliziert.
Das String Item LinkTap01_1_action ist ein ungebundenes Item. Es dient also nur dazu, Vorgänge in openHAB zu steuern. Die UI löst jedes Mal, wenn dort ein Item beeinflusst wird, ein Command aus. Auf dem Bus tritt dann also das Event received command auf. Entsprechend reicht eine Rule:
Ich habe trotzdem die Rule für das Rücksetzen des 'Item LinkTap01_1_iswatering' belassen, da LinkTap nicht sofort das Ventil öffnet bzw. schließt. Es braucht immer ein paar Sekunden (scheint so gewollt, ist in deren App auch so). Erst dann wird natürlich auch der Status 'iswatering' von LinkTap gesendet. Somit hat man eine Response, dass die Bewässerung dann auch wirklich begonnen bzw. gestoppt hat.Das Rücksetzen des Knopfes über das Item kann also direkt erfolgen, und dabei wird die Rule nicht nochmal getriggert (im Gegensatz zur Variante über changed)
>Was mich etwas irritiert: Wenn Du schon einen Channel für den STOPP-Befehl angelegt hast, warum nutzt Du den denn nicht?
Das war ein überbleibsel auf einem ersten Versuch, den ich so nicht mehr benötige.
Vielen Dank,
Andreas
- udo1toni
- Beiträge: 13989
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: LinkTap Bewässerungscomputer und Flow Meter via MQTT integrieren
Ja, aber nein. Das ist der falsche Weg. Der Knopf ist nur ein Knopf und sagt nichts über den echten Zustand aus.
Da Du ja ein Item hast, welches den Zustand ändert, zeige lieber dieses Item zusätzlich an. Wenn Du das in der Sitemap in einem Widget abbilden willst, gibt es verschiedene Optionen dazu, z.B. kannst Du über die visibility gehen:
Code: Alles auswählen
Switch item=LinkTap01_1_action label="Bewässern AKTIV!" mappings=[START="Start",STOP="Stop"] visibility=[LinkTap01_1_iswatering==ON]
Switch item=LinkTap01_1_action label="Bewässern inaktiv" mappings=[START="Start",STOP="Stop"] visibility=[LinkTap01_1_iswatering!=ON]
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet