NEWS
Hydrawise (Bewässerungsseuerung)
-
Hi!
Leider kann ich keinen Adapter bauen, habe aber ein Skript zusammengewürfelt, dass die Daten aus der Api zieht. Leider gibt API1 nicht viel her - zb nicht die Wassermenge meines Sensors "Wasseruhr". Ich habe Hunter mal angemailt, ob es für API2 eine Doku gibt.schedule('* * * * *', function(){ var url="https://app.hydrawise.com/api/v1/statusschedule.php?api_key=xxxx-xxxx-xxxx-xxxx" request({url : url}, function (error, response, body) { CreateRelays(JSON.parse(body)); }); var url="https://app.hydrawise.com/api/v1/customerdetails.php?api_key=xxxx-xxxx-xxxx-xxxx" request({url : url}, function (error, response, body) { CreateCustomer(JSON.parse(body)); }); }) function CreateCustomer(data){ //log(data.controllers); if (existsState('javascript.0.hydrawise.user_lastcontact')==false) { createState('javascript.0.hydrawise.user_lastcontact'); } setState('javascript.0.hydrawise.user_lastcontact', data.controllers[0].last_contact ); if (existsState('javascript.0.hydrawise.user_status')==false) { createState('javascript.0.hydrawise.user_status'); } setState('javascript.0.hydrawise.user_status', data.controllers[0].status ); } function CreateRelays(data){ if ("undefined" !== typeof data.relays){ //log(data.relays); var i; for (i = 0; i < data.relays.length; i++) { if (existsState('javascript.0.hydrawise.relay'+i+'_id')==false) { createState('javascript.0.hydrawise.relay'+i+'_id'); } setState('javascript.0.hydrawise.relay'+i+'_id', data.relays[i].relay_id ); if (existsState('javascript.0.hydrawise.relay'+i+'_time')==false) { createState('javascript.0.hydrawise.relay'+i+'_time'); } setState('javascript.0.hydrawise.relay'+i+'_time', data.relays[i].time ); if (existsState('javascript.0.hydrawise.relay'+i+'_run')==false) { createState('javascript.0.hydrawise.relay'+i+'_run'); } setState('javascript.0.hydrawise.relay'+i+'_run', data.relays[i].run ); if (existsState('javascript.0.hydrawise.relay'+i+'_run_min')==false) { createState('javascript.0.hydrawise.relay'+i+'_run_min'); } setState('javascript.0.hydrawise.relay'+i+'_run_min', Math.round(data.relays[i].run/60) ); if (existsState('javascript.0.hydrawise.relay'+i+'_name')==false) { createState('javascript.0.hydrawise.relay'+i+'_name'); } setState('javascript.0.hydrawise.relay'+i+'_name', data.relays[i].name ); if (existsState('javascript.0.hydrawise.relay'+i+'_period')==false) { createState('javascript.0.hydrawise.relay'+i+'_period'); } setState('javascript.0.hydrawise.relay'+i+'_period', data.relays[i].period ); if (existsState('javascript.0.hydrawise.relay'+i+'_timestr')==false) { createState('javascript.0.hydrawise.relay'+i+'_timestr'); } setState('javascript.0.hydrawise.relay'+i+'_timestr', data.relays[i].timestr ); } if ("undefined" !== typeof data.sensors){ log (data.sensors); var i; for (i = 0; i < data.sensors.length; i++) { //log(data.sensors); } } } else{console.warn('Response in JSON nicht gefunden ! ')} }
-
@micha68 Oh, ich hatte nicht erwartet, dass auf meinen Post vom Juni 2017 noch mal jemand reagieren würde
Ich habe dein Skript gleich mal ausprobiert und es füllt die Datenpunkte mit dem, was die Hydrawise API halt an Daten liefert. Ich hatte noch ein veraltetes Skript laufen, bei dem ursprünglich mal mehr Datenpunkte ausgelesen wurden, aber die API hat sich wohl zwischenzeitlich geändert und wurde abgespeckt
Kannst du mir sagen was für eine Zeitangabe hinter "period" steckt? Der Wert hat sich heute noch nicht geändert -
Hi!
Period habe ich noch nicht heraus gefunden.
Bei mir steht da 259200. Wenn man das herunter rechnet, kommt man auf 72h. Das hat aber nichts mit meinen Beregnungszeiten zu tun.Es gibt auch noch mehr Datenpunkte, wie zB Deinen Namen etc. - die habe ich aber aus Mangel an Bedarf nicht ausgewertet. Bei Bedarf kann ich das aber erweitern. Welche fehlen Dir denn?
Wenn du die log-Anweisungen mal reinkommentierst im Skript (also die // weg machen) dann siehst du unten im log, was da an Daten von der API kommt.
Es gibt auch ein pdf über die API1 von Hydrawise, das ist aber nicht aktuell.
Was mich interessiert: Wie viele Ventile hast Du denn verbaut? Ich drei, und die werden auch ausgelesen. Sollten es mehr oder weniger sein, sollte das Script auch funktionieren (also egal ob 1 oder 2 oder sogar 12)
Gruß
Micha -
@micha68 ja, bei mir steht da auch 259200 und auch ich kann damit (72h) so gar nichts anfangen. Früher gab es mal die Info, wie lange die letzte Bewässerung her war:
Aber der ist nicht mehr dabei. Wenn man einfach den HTTP Aufruf im Browser eingibt, sieht man ja auch, welche Daten zurückkommen.Ich habe insgesamt 6 Ventile (5 Kreise + Master) und alle 5 werden ausgelesen. Die fehlenden Daten wie Name, Seriennummer und Device ID habe ich schon reingebastelt, aber da sie diese Daten normalerweise nicht ändern (zumindest bei mir nicht), ist das recht sinn befreit
Das es ein Master Ventil gibt, wird auch angezeigt:
-
@micha68 ... und ich habe hier noch die alte (v1.3) API Doku gefunden - da waren schon ein paar interessante Infos drin:
PS: und vieles mehr - hier ist einfach die ganze Doku:
Hydrawise API.pdfEcht schade, dass das alles weg ist
-
Ohja, die Daten wären super. Auch Wetter und so...schade
Ich hatte ja Hunter angefragt wegen API2, habe aber keine Antwort bisher...
Schaumerma...
-
Hallo zusammen!
Da ich vor der gleichen Herausforderung stehe, habe ich auch nach der API2 gefragt, allerdings folgendeInfo erhalten: "The GraphQL API will not provide any more detail than the RestAPI, the only difference is that it allows for commercial connection to multiple controllers." Sieht also nicht gut aus.
Viele Grüße!
Marc
-
Hi!
Die gleiche Antwort habe ich vorhin auch bekommen.
Schade. Ich hatte die Hoffnung, da noch mehr Daten raus zu holen.Könnte man die Website parsen? Ich weiß halt nicht, wie man da den Login per skript realisiert
Gruß
Micha -
API2 ist wohl jetzt möglich ?
https://support.hydrawise.com/hc/en-us/articles/360008965753-Account-API-Information -
tut sich da noch was? wäre auch interessant für mich...
-
Wäre auch noch daran interessiert, die Bewässerungssaison naht und wäre schön meine Hydrawise in den IO zu integrieren...
Ist da noch jemand dran bzw. hat da etwas am laufen ? -
Hi Micha !
Das Skript läuft mit meinem PRO-HC12 und holt den Relaystatus. Besten Dank !
Steuern kann man mit dem Skript nicht, richtig ?
Das klappt bei mir manuell über einen PHP-Aufruf gut, z.B.: https://api.hydrawise.com/api/v1/setzone.php?action=run&api_key=meinKEY&period_id=999&relay_id=3004643&custom=120
Wenn ich die Lese-JSON im Browser aufrufe bekomme ich noch mehr Daten zu meinen Sensoren (Hunter Wasserzähler und Hunter Regensensor). Kann bei Bedarf hier die JSON-Daten zur Verfügung stellen, wenn jemand Muße hat, die in die Abfrage einzubauen.
Bildschirmfoto 2021-02-23 um 16.06.57.png
Besten Gruß,
Sebastian -
So wie ich es in der Beschreibung lese, sollte es gehen... der Wert ist allerdings im obigen Script noch nicht definiert.
-
@janne16 Moin zusammen, ich bin als Autor ganz neu hier. Vergebt mir, wenn ich noch manches suchen muss, aber ich freue mich, wenn ich der Community endlich mal was zurückgeben kann Mitgelesen (und abgeschrieben) habe ich schon sooft
ich hab das Skript von Micha68 oben ergänzt bei mir und nun werden auch Sensordaten vom Regensensor abgerufen. Ich kann zwar mit den Daten noch nichts anfangen, habe auch noch keine Testberegnung durchgeführt um zu schauen, was sich ändert, aber ich wollte schonmal die Chance zum Testen geben:
Im obigen Skript kann die Zeile 87 durch folgendes ersetzt werden:if (existsState('javascript.0.hydrawise.sensor'+i+'_input')==false) { createState('javascript.0.hydrawise.sensor'+i+'_input'); } setState('javascript.0.hydrawise.sensor'+i+'_input', data.sensors[i].input ); if (existsState('javascript.0.hydrawise.sensor'+i+'_mode')==false) { createState('javascript.0.hydrawise.sensor'+i+'_mode'); } setState('javascript.0.hydrawise.sensor'+i+'_mode', data.sensors[i].mode ); if (existsState('javascript.0.hydrawise.sensor'+i+'_timer')==false) { createState('javascript.0.hydrawise.sensor'+i+'_timer'); } setState('javascript.0.hydrawise.sensor'+i+'_timer', data.sensors[i].timer ); ``` if (existsState('javascript.0.hydrawise.sensor'+i+'_offtimer')==false) { createState('javascript.0.hydrawise.sensor'+i+'_offtimer'); } setState('javascript.0.hydrawise.sensor'+i+'_offtimer', data.sensors[i].offtimer );
PS: ich verstehe nicht, warum, aber ich musste einmal den Hydrawise-Objektbaum unterhalb des Javaskript-Ordners löschen und dann wurde alles inkl. Sensordaten neu aufgebaut.
PS2: ich habe einen Regensensor, ich weiß nicht, ob es weitere Sensoren gibt bzw. welche Art und welche Parameter diese dann haben. Bei Qwertz sieht es aus, als gibt es noch einen Parameter "Rate" für den Sensor 0. Dafür müsste es reichen, wenn diese drei Zeilen ergänzt werden. Das kann ich aber nicht testen (Sensoren, die diesen Parameter nicht haben, behalten dort Wert=(null) ) :if (existsState('javascript.0.hydrawise.sensor'+i+'_rate')==false) { createState('javascript.0.hydrawise.sensor'+i+'_rate'); } setState('javascript.0.hydrawise.sensor'+i+'_rate', data.sensors[i].rate );
Gruß
Jaywalker -
Hi @qwertz ,
Ich hätte Interesse an Deine Abfrage, da ich auch einen Wasserzähler angeschlossen habe.
Viele Grüße
Michael