OpenSprinkler Support

Begonnen von bicmac, 19 Juni 2020, 16:50:38

Vorheriges Thema - Nächstes Thema

bicmac

Hi,
ich hätte interesse an einem Template für OpenSprinkler. Dieses unterstützt seid heute MQTT. Wäre schön wenn mir da jemand helfen könnte. Ich bin da DAU bei den Templates, unterstütze aber gern wenn mir jemand erklärt was ich da machen muss.
Momentan lässt sich über MQTT bei OpenSprinkler auch nur der Status der einzelnen Zonen/Sensoren darstellen und noch nichts steuern. Dies wird aber sicher in zukünftigen FW Versionen von Opensprinkler noch erweitert.
Daher ist es ggf Sinnvoll auch pro Zone ein eignenes Device anzulegen. Momentan würde aber ein normales anzeigen aller Topics reichen.

MQTT auf Opensprinkler ist bei OpenSprinkler momentan so beschrieben:

https://openthings.freshdesk.com/support/solutions/articles/5000859089-how-to-use-mqtt

Firmware 2.1.9(4) Topics:
At the moment of this writing, the OpenSprinkler firmware only supports publishing data to the broke. You can use a subscriber client (e.g. the mosquitto_sub command, or a mobile MQTT client, or a home automation hub that supports MQTT) to receive the data. A list of currently supported topics are detailed below:

The root topic name is always opensprinkler. In future firmware, we will allow users to customize the root topic, in order to provide better support for multiple OpenSprinkler devices you may have.
opensprinkler/system: this topic receives {"state":"started"} message when the controller boots.
opensprinkler/station/x: where x is the index (starting from 0) of the station/zone. For example, the first zone is 0, the second zone is 1 and so on. This topic receives {"state":1} message when station/zone x starts running, and {"state":0,"duration":ss} message when the zone finishes running, where ss is the number of seconds that it ran. To receive data for all stations, you can subscribe to wildcard topic opensprinkler/station/#
opensprinkler/sensor1: this topic receives {"state":1} when sensor 1 activates and {"state":0} when sensor 1 deactivates.
opensprinkler/sensor2: similar to above but for sensor 2.
opensprinkler/raindelay: similar to above but for rain delay.
opensprinkler/sensor/flow: this topic receives {"count":cc,"volume":vv} when the flow sensor generates data (usually when a zone finishes running), where cc is the flow count, and vv is the amount of volume.

Hier mal ein  raw vom angelegtem Device:


defmod Opensprinkler MQTT2_DEVICE OS_D8803963182F
attr Opensprinkler DbLogExclude .*
attr Opensprinkler IODev MQTT2_FHEM_Serverattr Opensprinkler room Aussen->Garten,MQTT2_DEVICE

bicmac

So wäre glaub ich die ReadingList


attr Opensprinkler readingList OS_D8803963182F:opensprinkler/availability:.* availability\
OS_D8803963182F:opensprinkler/system:.* { json2nameValue( $EVENT, 'System_', $JSONMAP ) }\
OS_D8803963182F:opensprinkler/sensor1:.* { json2nameValue( $EVENT, 'Sensor1_', $JSONMAP ) }\
OS_D8803963182F:opensprinkler/sensor2:.* { json2nameValue( $EVENT, 'Sensor2_', $JSONMAP ) }\
OS_D8803963182F:opensprinkler/raindelay:.* { json2nameValue( $EVENT, 'raindelay_', $JSONMAP ) }\
OS_D8803963182F:opensprinkler/sensor/flow:.* { json2nameValue( $EVENT, 'flow_', $JSONMAP ) }\
OS_D8803963182F:opensprinkler/station/0:.* { json2nameValue( $EVENT, 'Station0_', $JSONMAP ) }\
OS_D8803963182F:opensprinkler/station/1:.* { json2nameValue( $EVENT, 'Station1_', $JSONMAP ) }\
OS_D8803963182F:opensprinkler/station/2:.* { json2nameValue( $EVENT, 'Station2_', $JSONMAP ) }\
OS_D8803963182F:opensprinkler/station/3:.* { json2nameValue( $EVENT, 'Station3_', $JSONMAP ) }\
OS_D8803963182F:opensprinkler/station/4:.* { json2nameValue( $EVENT, 'Station4_', $JSONMAP ) }\
OS_D8803963182F:opensprinkler/station/5:.* { json2nameValue( $EVENT, 'Station5_', $JSONMAP ) }\
OS_D8803963182F:opensprinkler/station/6:.* { json2nameValue( $EVENT, 'Station6_', $JSONMAP ) }\
OS_D8803963182F:opensprinkler/station/7:.* { json2nameValue( $EVENT, 'Station7_', $JSONMAP ) }\
OS_D8803963182F:opensprinkler/station/8:.* { json2nameValue( $EVENT, 'Station8_', $JSONMAP ) }\
OS_D8803963182F:opensprinkler/station/9:.* { json2nameValue( $EVENT, 'Station9_', $JSONMAP ) }\
OS_D8803963182F:opensprinkler/station/10:.* { json2nameValue( $EVENT, 'Station10_', $JSONMAP ) }\
OS_D8803963182F:opensprinkler/station/11:.* { json2nameValue( $EVENT, 'Station11_', $JSONMAP ) }\
OS_D8803963182F:opensprinkler/station/12:.* { json2nameValue( $EVENT, 'Station12_', $JSONMAP ) }\
OS_D8803963182F:opensprinkler/station/13:.* { json2nameValue( $EVENT, 'Station13_', $JSONMAP ) }\
OS_D8803963182F:opensprinkler/station/14:.* { json2nameValue( $EVENT, 'Station14_', $JSONMAP ) }\
OS_D8803963182F:opensprinkler/station/15:.* { json2nameValue( $EVENT, 'Station15_', $JSONMAP ) }\
OS_D8803963182F:opensprinkler/station/16:.* { json2nameValue( $EVENT, 'Station16_', $JSONMAP ) }


Wie mache ich da snun als Template?

Leider liefert OpenSprinkler nicht die Namen zu den Stationen dazu. Ich habe das aber schon requested. ggf kann man das ja schnell auf deren Seite einbauen. die müsste man sich irgendwie über einen API Call auf das Device abhlen einmalig und dann manuell setzen.

Beta-User

Was mir nicht klar ist:
Macht es mit den langen Präfixen Sinn? Oder soll das sowieso umbenannt werden?
Wenn ja mit den langen: überall? Oder sind die Infos aus den ersten paar Zeilen sowieso eindeutig?

Wenn man sprechende Namen für die Zonen hat, könnte man auch gleich den Zonennamen als Topic-Teil benutzen (möglichst ohne Umlaute).

Bitte nicht nur den oberen Teil des RAW liefern, sondern möglichst auch die setstate-Angaben, dann sehe ich besser, was da rauskommt...

Bleibt die Frage, was mit der CID ist (OS_D8803963182F). Brauchen wir die, oder gibt es in einem Haushalt nie mehr wie eine opensprinkler-Installation? Kann man bei mehreren irgendwie den Topic-Präfix (opensprinkler) ändern (das wäre dann zu empfehlen, die CID ist dann unbrauchbar, wenn wir einen externen Broker haben)?


Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

bicmac

#3
Also Opensprinkler hat halt (in meinem Falle) maximal 16 verschiedene Stationen (das sind die einzelnen Magnetventile) die es ansteuern kann. Für jedes dieser meildet es den Status. Nun sind die Zahlen nicht wirklich aussagekräftig. In der App von Opensprinkler selber kann man den Stationen auch nahmen (zum Beispiel: Rasen (unten) ) geben. Leider werden die Namen nicht mit gemeldet.
Ich hoffe das der Name der Station in einem nächsten FW update auch als Topic mit kommt.
Bis dahin würde sicher auch reichen für jede der Stationen einfach Nummer und dann die Readings (momentan wären das state und duration)
Das selbe gilt für die anderen topics wie Sensor usw.
Es kann in einem Haushalt auch mehrere Opensprinkler geben. Da man diese auch koppeln kann. Ich selber habe aber nur einen im Einsatz. Leider kann man den Topicnamen stand jetzt nicht anpassen. Aber es ist ja auch erst die erste FW Version von Opensprinkler die MQTT unterstützt.


defmod Opensprinkler MQTT2_DEVICE OS_D8803963182F
attr Opensprinkler DbLogExclude .*
attr Opensprinkler IODev MQTT2_FHEM_Server
attr Opensprinkler readingList OS_D8803963182F:opensprinkler/availability:.* availability\
OS_D8803963182F:opensprinkler/system:.* { json2nameValue( $EVENT, 'System_', $JSONMAP ) }\
OS_D8803963182F:opensprinkler/sensor1:.* { json2nameValue( $EVENT, 'Sensor1_', $JSONMAP ) }\
OS_D8803963182F:opensprinkler/sensor2:.* { json2nameValue( $EVENT, 'Sensor2_', $JSONMAP ) }\
OS_D8803963182F:opensprinkler/raindelay:.* { json2nameValue( $EVENT, 'raindelay_', $JSONMAP ) }\
OS_D8803963182F:opensprinkler/sensor/flow:.* { json2nameValue( $EVENT, 'flow_', $JSONMAP ) }\
OS_D8803963182F:opensprinkler/station/0:.* { json2nameValue( $EVENT, 'Station0_', $JSONMAP ) }\
OS_D8803963182F:opensprinkler/station/1:.* { json2nameValue( $EVENT, 'Station1_', $JSONMAP ) }\
OS_D8803963182F:opensprinkler/station/2:.* { json2nameValue( $EVENT, 'Station2_', $JSONMAP ) }\
OS_D8803963182F:opensprinkler/station/3:.* { json2nameValue( $EVENT, 'Station3_', $JSONMAP ) }\
OS_D8803963182F:opensprinkler/station/4:.* { json2nameValue( $EVENT, 'Station4_', $JSONMAP ) }\
OS_D8803963182F:opensprinkler/station/5:.* { json2nameValue( $EVENT, 'Station5_', $JSONMAP ) }\
OS_D8803963182F:opensprinkler/station/6:.* { json2nameValue( $EVENT, 'Station6_', $JSONMAP ) }\
OS_D8803963182F:opensprinkler/station/7:.* { json2nameValue( $EVENT, 'Station7_', $JSONMAP ) }\
OS_D8803963182F:opensprinkler/station/8:.* { json2nameValue( $EVENT, 'Station8_', $JSONMAP ) }\
OS_D8803963182F:opensprinkler/station/9:.* { json2nameValue( $EVENT, 'Station9_', $JSONMAP ) }\
OS_D8803963182F:opensprinkler/station/10:.* { json2nameValue( $EVENT, 'Station10_', $JSONMAP ) }\
OS_D8803963182F:opensprinkler/station/11:.* { json2nameValue( $EVENT, 'Station11_', $JSONMAP ) }\
OS_D8803963182F:opensprinkler/station/12:.* { json2nameValue( $EVENT, 'Station12_', $JSONMAP ) }\
OS_D8803963182F:opensprinkler/station/13:.* { json2nameValue( $EVENT, 'Station13_', $JSONMAP ) }\
OS_D8803963182F:opensprinkler/station/14:.* { json2nameValue( $EVENT, 'Station14_', $JSONMAP ) }\
OS_D8803963182F:opensprinkler/station/15:.* { json2nameValue( $EVENT, 'Station15_', $JSONMAP ) }\
OS_D8803963182F:opensprinkler/station/16:.* { json2nameValue( $EVENT, 'Station16_', $JSONMAP ) }
attr Opensprinkler room Aussen->Garten,MQTT2_DEVICE

setstate Opensprinkler 0
setstate Opensprinkler 2020-06-20 09:34:35 Sensor1_state 1
setstate Opensprinkler 2020-06-20 09:30:00 Station0_duration 5
setstate Opensprinkler 2020-06-20 09:30:00 Station0_state 0
setstate Opensprinkler 2020-06-19 16:58:01 Station3_duration 6
setstate Opensprinkler 2020-06-19 16:58:01 Station3_state 0
setstate Opensprinkler 2020-06-20 09:30:10 Station5_duration 6
setstate Opensprinkler 2020-06-20 09:30:10 Station5_state 0
setstate Opensprinkler 2020-06-20 09:29:50 Station7_duration 3
setstate Opensprinkler 2020-06-20 09:29:50 Station7_state 0
setstate Opensprinkler 2020-06-19 17:10:12 availability online



Beta-User

Na ja, du kannst das mit den Namen ja auch via jsonMap machen:

In der readingList z.B. einfach (kürzer...):
[...]
opensprinkler/station/0:.* { json2nameValue( $EVENT, 'St0_', $JSONMAP ) }\
[...]

und dann passendes jsonMap:
attr Opensprinkler jsonMap St0_duration:Rasen_oben_Dauer St0_state:Rasen_oben_Status
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files