Hydrawise Beregner mit JsonMod

Begonnen von Gerhard, 23 März 2020, 09:30:36

Vorheriges Thema - Nächstes Thema

Gerhard

ich möchte mit JsonMod mein Hydrawise einbinden:

auf folgendem Link:
https://app.hydrawise.com/api/v1/statusschedule.php?api_key=D00A-E6D0-E6D0-AF6F
erhalte ich folgendes:
{"time":1584950090,"nextpoll":60,"message":"","simRelays":1,"options":1,"expanders":[],"sensors":[{"input":0,"type":1,"mode":2,"timer":30,"offtimer":30,"relays":[{"id":280143},{"id":280234},{"id":280238}]}],"relays":[{"relay_id":280143,"time":1576800000,"type":110,"run":0,"relay":1,"name":"Zna 1","period":259200,"timestr":""},{"relay_id":280234,"time":1576800000,"type":110,"run":0,"relay":2,"name":"Zna 2","period":259200,"timestr":""},{"relay_id":280238,"time":1576800000,"type":110,"run":0,"relay":3,"name":"Zna 3","period":259200,"timestr":""}]}
bzw.:
time 1584950090
nextpoll 60
message ""
simRelays 1
options 1
expanders []
sensors
0
input 0
type 1
mode 2
timer 30
offtimer 30
relays
0
id 280143
1
id 280234
2
id 280238
relays
0
relay_id 280143
time 1576800000
type 110
run 0
relay 1
name "Zna 1"
period 259200
timestr ""
1
relay_id 280234
time 1576800000
type 110
run 0
relay 2
name "Zna 2"
period 259200
timestr ""
2
relay_id 280238
time 1576800000
type 110
run 0
relay 3
name "Zna 3"
period 259200
timestr ""


Response-Header:
Connection   keep-alive
Content-Encoding   gzip
Content-Length   233
Content-Type   application/json
Date   Mon, 23 Mar 2020 07:54:50 GMT
Server   nginx
Vary   Accept-Encoding
X-Frame-Options   SAMEORIGIN


Request-Header:
Accept   text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding   gzip, deflate, br
Accept-Language   de,en-US;q=0.7,en;q=0.3
Connection   keep-alive
Host   app.hydrawise.com
Upgrade-Insecure-Requests   1
User-Agent   Mozilla/5.0 (Windows NT 6.1; rv:74.0) Gecko/20100101 Firefox/74.0


mein List:
Internals:
   API_LAST_RES 1584951361.24842
   DEF        https://app.hydrawise.com/api/v1/statusschedule.php?api_key=XXXX
   FUUID      5e786973-f33f-0c99-e8f2-f310fc5aec80063d
   NAME       hydraSzilvas99
   NEXT       2020-03-23 09:30:00
   NR         87
   NTFY_ORDER 50-hydraSzilvas99
   SOURCE     https://app.hydrawise.com/api/v1/statusschedule.php?api_key=XXXX (200)
   STATE      ???
   SVN        21487 2020-03-22 23:34:07
   TYPE       JsonMod
   CONFIG:
     IN_REQUEST 0
     SOURCE     https://app.hydrawise.com/api/v1/statusschedule.php?api_key=XXXX
     SECRET:
   READINGS:
Attributes:
   interval   */15 * * * *
   room       KERT


wie weiter?, brauche Hilfe.

FB6890LTE, cubietruck, orangePi, raspberry 2/3/4, HM/HMIP, shelly > 50, etc.

rudolfkoenig

#1
In kann nicht beurteilen, ob das Veroeffentlichen der api_key Probleme nach sich zieht, ich empfehle es zu anonymisieren.

Aber es hat mir erlaubt eine "billige" Alternative zu testen :)
define hw at +*00:01 { HttpUtils_NonblockingGet({\
  url=>"https://app.hydrawise.com/api/v1/statusschedule.php?api_key=XXXX",\
  callback=>sub($$$){ Log 1,"hw:$_[1]" if($_[1]);; json2reading($defs{hw},$_[2]) } }) }

Gerhard

danke, ich werde es ausbauen...

denn api_key werde ich dann äendern, momentan macht es keine Probleme.
FB6890LTE, cubietruck, orangePi, raspberry 2/3/4, HM/HMIP, shelly > 50, etc.

herrmannj

Moin,

zum API key:

bei JsonMod:
set hydraSzilvas99 secret KEY D00A-xxxx-xxxx-xxxx

Dann die def ändern auf
... https://app.hydrawise.com/api/v1/statusschedule.php?api_key=[KEY]
Dann passiert Dir das nie wieder.

Um den Unterschied von billiger Alternative zum Original zu erleben  :P:

Schreib mal bitte welche Informationen aus dem JSON Du (evtl wie formatiert) angezeigt haben möchtest. Ich mach Dir eine readingList draus :)

Gerhard

FB6890LTE, cubietruck, orangePi, raspberry 2/3/4, HM/HMIP, shelly > 50, etc.

herrmannj

Ich jetzt? Nö..

Aber mach doch hier weil: dann können andere aus dem hier lernen. JsonMod hat ja den Sinn das es immer individuell (nach Anwendung) ist und da will ich den Wissentransfer ermöglichen.

Gerhard

sorry, du hast vollkommen Recht!!

folgende readings erhalte ich nach senden von:

https://app.hydrawise.com/api/v1/statusschedule.php?api_key=XXXX

time 1584957880
nextpoll 60
message ""
simRelays 1
options 1
expanders []
sensors
0
input 0
type 1
mode 2
timer 30
offtimer 30
relays
0
id 280143
1
id 280234
2
id 280238
relays
0
relay_id 280143
time 1576800000
type 110
run 0
relay 1
name "Zna 1"
period 259200
timestr ""
1
relay_id 280234
time 1576800000
type 110
run 0
relay 2
name "Zna 2"
period 259200
timestr ""
2
relay_id 280238
time 1576800000
type 110
run 0
relay 3
name "Zna 3"
period 259200
timestr ""


eigentlich möchte ich alle Daten in readings, bis Rel 1 reicht es mir, den Rest solte ich weiter kompletieren.

volgende Befehle möchte ich noch realisieren:


https://app.hydrawise.com/api/v1/setzone.php?api_key=XXXX&action=run&relay_id=280143&custom=10

https://app.hydrawise.com/api/v1/setzone.php?api_key=XXXX&action=stop&relay_id=280143

R1: relay_id 280143
R2: relay_id 280234
R3: relay_id 280238

# Actions must be one from this list.
    action_list = [
        'run',        # Run a zone for an amount of time.
        'runall',     # Run all zones for an amount of time.
        'stop',       # Stop a zone.
        'stopall',    # stop all zones.
        'suspend',    # Suspend a zone for an amount of time.
        'suspendall'  # Suspend all zones.
]


hier auch nur einen Anfang den ich weiter ausarbeite.
FB6890LTE, cubietruck, orangePi, raspberry 2/3/4, HM/HMIP, shelly > 50, etc.

herrmannj

#7
Solltest Du wirklich _alle_ Werte in readings packen wollen ist Rudis Ansatz geeigneter.

JsonMod ist in der gegenteiligen Situation spannend: wenn ich gezielt auf einzeln Elemente des JSON zugreifen möchte und die dann in Readings umwandle.

mit dieser readingList:
single(jsonPath('$.relays[0].run'), 'Garten_Sprinkler');
single(jsonPath('$.relays[1].run'), 'Rasen_Sprinkler');
single(jsonPath('$.relays[2].run'), 'Beet_Sprinkler');

bekommst Du den Wert aus 'run' für jedes Relais. Nach meinem Verständnis handelt es sich ja um Bewässerung (?). Die Readings habe ich jetzt fiktiv benannt aber ich denke das System erklärt sich. Mir fehlt jetzt das Wissen um das System um erkennen welche weiteren Werte (in FHEM) für Dich als Anwender jetzt relevant sein könnten. Vtml reicht das aber als Startpunkt für Dich und ich helfe gern weiter.

als Tipp diese Seite: https://jsonpath.herokuapp.com/
Da kannst Du links das JSON reinkopieren und unten die JSONPath Querys eingeben und da siehst Du sofort ob das rauskommt was Du möchtest.

Als parser "Goessner" einstellen. Den Parser in JsonMod habe ich selber implementiert. Immer wenn dort was anderes rauskommt als bei mir muss ich nacharbeiten ;)

So wie im Anhand sieht das Ergebnis aus.

herrmannj

#8
Ich sehe gerade das der KEY dann doch unter "SOURCE" erscheint - das ändere ich ab.

edit: Done!