ioBroker / AdapterRequests

This Place is used to track the status of new Adapter-Requests.
248 stars 36 forks source link

Hydrawise Bewässerung #195

Closed stonehengej closed 8 months ago

stonehengej commented 5 years ago

Ein Adapter für Hydrawise wäre klasse. https://www.hydrawise.com API bekommt man wohl nur auf Anfrage: https://support.hydrawise.com/hc/en-us/articles/360008965753-Account-API-Information Hier hat jemand bereits etwas für Neo und IP-Symcon gebaut: https://mediola.answerbase.com/2301313/Darstellung-der-Informationen-eines-Bewässerungssystems-in-NEO https://www.symcon.de/forum/threads/37530-Hunter-Hydrawise-einbinden

Apollon77 commented 5 years ago

Ein paar mehr Informationen zu "Hydrawise" wären ebenso klasse :-) Links zum Produkt? Links zu Anleitungen? Links zu verfügbaren APIs? Links zu verfügbaren Bibliotheken zu einer Anbindung?

marcelk80 commented 4 years ago

Hydrawise ist eine Software die zur Bewässerung dient und kommt von Hunter. https://www.hydrawise.com/ Es können damit verschiendenste Bewässerungscontroller angesteuert werden: https://www.hydrawise.com/content/hydrawise-controllers-and-hardware

aDabbelju commented 4 years ago

Es gibt eine python library, die scheinbar auch gepflegt wird. Vielleicht dienen diese Informationen zur Umsetzung in einen Adapter.

ghost commented 4 years ago

Einen API-Key könnte ich testweise zur Verfügung stellen...

DutchmanNL commented 4 years ago

hab mit die scripte mal angeschaut das sieht nach ner guten JSON aus die kann man eigentlich ganz leicht umsetzen in states.

Mit API documentation und nem key zu testen könnte wir mal schauen

Cmax74 commented 4 years ago

Würde mich auf freuen, ich habe einen Hydrawise Hunter HC 6 im Einsatz und kann euch gern unterstützen (außer beim Programmieren).

micha68 commented 4 years ago

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 commented 4 years ago

Antwort von Hunter zu API2:

the Graph QL API is designed for commercial application and monitoring more than 1 controller it does not offer any extra functionality than the RestAPI.

MichHan commented 3 years ago

Hallo,

ich habe seit ein paar Tagen einen Hunter Hydrawise HC-Pro am Start und verwende ioBroker. Habe mit Interesse dieses Request gelesen und würde gerne mit der Hardware unterstützen.

Hydrawise hat auch eine Seite mit guten Informationen zu den beiden verfügbaren API im Netz (Link war auch schon oben verlinkt): https://support.hydrawise.com/hc/en-us/articles/360008965753-Account-API-Information

Die pdf Datei mit den Informationen zur REST-API ist auf dieser Seite verlinkt: Hydrawise REST API.pdf

Habe gerade mal etwas mit den Informationen "gespielt" und das Abrufen der Informationen und auch einfache Aktionen, wie starten und stoppen einer Bewässerung per API hat problemlos geklappt.

Es wäre toll, wenn ich mit meinem Gerät und Zugang die Basis für eine Adapterentwicklung für ioBroker unterstützen könnte.

Gruß

Michael

LuxBibi commented 2 years ago

Hallo Community, Hat jemand einen aktuellen Status zur ioBroker integration von Hunter Controlern? Gruss,und vielen Dank im Voraus für's update ... Luc

chris-hoe commented 2 years ago

+1 ... ich würde mich auch sehr über einen funktionierenden ioBroker Adapter für meine Hunter Hydrawise freuen - sowohl zur Auswertung, als auch zur Steuerung. Gibt es ev. jemanden, der daran arbeitet? Beim testen kann ich gerne helfen, über eine Spende lässt sich auch reden - für mehr fehlt mir leider die Zeit, tut mir leid. Viele Grüße, Christian

Magnus8513 commented 2 years ago

Gibt es hier inzwischen schon etwas? Falls nicht, würde ich mir das mal ansehen.

aDabbelju commented 2 years ago

Mir ist hier noch keine Lösung bekannt. Ich biete mich auch gerne zum Testen an :-)

chris-hoe commented 2 years ago

Hallo Magnus, nicht wirklich viel, außer dem, was hier bei dem Tiket steht. Im deutchen Forum gibt es noch einen Thread zu dem Thema, aber die Überschneidungen zu den Infos hier sind sehr groß. Eine wirkliche Lösung ist mir nicht bekannt. VG, Christian

MichHan commented 2 years ago

Hallo, ist mir aktuell auch nicht bekannt. Ich kann mit Hardware und Testzugang (API) unterstützen. Freue mich auf den Kontakt.

JanneW3 commented 2 years ago

Hallo zusammen,

der letzte Eintrag ist zwar schon lange her, aber vlt. ist noch jemand hier aktiv und kann mir den richtigen Input geben. Ich habe das Script installiert und dabei gesehen, dass die Zeitangaben in Unix sind. Meine Java-Fähigkeiten sind allerdings nicht prickelnd und ich habe so meine Probleme aus den Zeitangaben brauchbare Werte zu ermitteln.

Beispiel: grafik

Aus diesem Zeitwert erhalte ich die Uhrzeit

Der Timestamp 1651186939 entspricht dem 29.04.2022 um 01:02:19 Uhr. (gilt für UTC+2)

Eine kurze Überprüfung im Hydravise-Konto ergibt, dass dieser Wert korrekt ist.

Der Wert javascript.0.hydrawise.relayx_time sollte dann die tägliche Bewässerungsuhrzeit ergeben. Zumindest sehe ich dort eine Veränderung, wenn ich verschiedene Zeitpläne für Zonen anwende und die Zeiten veränder... Bei der Formel du bin ich dann allerdings ratlos.

micha68 commented 2 years ago

Hallo!

Die Relaytime gibt an, in wie vielen Sekunden beregnet wird. Willst Du also wissen, wann das nächste mal das Relay angesteuert wird, musst Du diese RelayTime + AktuelleTime rechnen.

Im ioBroker mache ich das so: a = new Date().getTime() ; a=a+data.relays[i].time*1000; a = formatDate(a, 'DD.MM. hh:mm'); } setState('javascript.0.hydrawise.relay'+i+'_timeS', a );

Gruß Micha

micha68 commented 2 years ago

Hier noch mal mein aktuelles ioBroker-Script in Gänze:

schedule('* * * * *', function(){

//Customer-Daten abfragen
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));
});

//Daten Current-Controller abfragen
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));
});

})

//*********************************/
function CreateCustomer(data){
//log(data.controllers);

//aktuelle Controller-ID (betrifft wohl die Website der Cloud, welcher aktuell da angewählt ist)
    if (existsState('javascript.0.hydrawise.current_controller_id')==false)
    {
        createState('javascript.0.hydrawise.current_controller_id');
    }
    setState('javascript.0.hydrawise.current_controller_id', data.controller_id );

//Customer ID
    if (existsState('javascript.0.hydrawise.customer_id')==false)
    {
        createState('javascript.0.hydrawise.customer_id');
    }
    setState('javascript.0.hydrawise.customer_id', data.customer_id );

//aktueller Controller-Name (betrifft wohl die Website der Cloud, welcher aktuell da angewählt ist)
    if (existsState('javascript.0.hydrawise.current_controller_name')==false)
    {
    createState('javascript.0.hydrawise.current_controller_name');
    }
    setState('javascript.0.hydrawise.current_controller_name', data.current_controller );

//alle Controller anlegen
var i;
    for (i = 0; i < data.controllers.length; i++) 
{
//Controller[] Name
    if (existsState('javascript.0.hydrawise.controller'+i+'_name')==false)
    {
        createState('javascript.0.hydrawise.controller'+i+'_name');
    }
    setState('javascript.0.hydrawise.controller'+i+'_name', data.controllers[i].name );

//Controller[] letzter Kontakt (Denke das ist Hunter, die Daten vom Controller holen)
    if (existsState('javascript.0.hydrawise.controller'+i+'_lastcontact')==false)
    {
        createState('javascript.0.hydrawise.controller'+i+'_lastcontact');
    }
    setState('javascript.0.hydrawise.controller'+i+'_lastcontact', data.controllers[i].last_contact );

//Controller[] Serial Number
    if (existsState('javascript.0.hydrawise.controller'+i+'_serial_number')==false)
    {
        createState('javascript.0.hydrawise.controller'+i+'_serial_number');
    }
    setState('javascript.0.hydrawise.controller'+i+'_serial_number', data.controllers[i].serial_number );

//Controller[] ID
    if (existsState('javascript.0.hydrawise.controller'+i+'_id')==false)
    {
    createState('javascript.0.hydrawise.controller'+i+'_id');
    }
    setState('javascript.0.hydrawise.controller'+i+'_id', data.controllers[i].controller_id );

//Controller[] Status
    if (existsState('javascript.0.hydrawise.controller'+i+'_status')==false)
    {
    createState('javascript.0.hydrawise.controller'+i+'_status');
    }
    setState('javascript.0.hydrawise.controller'+i+'_status', data.controllers[i].status );
}
}

//*********************************/
function CreateRelays(data){

if ("undefined" !== typeof  data.relays){    
    //log(data.relays);

//aktuellen Controller auslesen (wie schaltet man die Controller per API um, ausser auf der Website)
var i;
// alle Ventile auslesen
    for (i = 0; i < data.relays.length; i++) 
{
//Ventil ID
    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 );

//Ventil nächste Startzeit als Zeitstempel
    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 );

//Ventil nächste Startzeit als String
    if (existsState('javascript.0.hydrawise.relay'+i+'_timeS')==false)
    {
        createState('javascript.0.hydrawise.relay'+i+'_timeS');
    }
    var a="";
    if (data.relays[i].time<500000)
    {
    a =  new Date().getTime() ;
    a=a+data.relays[i].time*1000;
    a =  formatDate(a, 'DD.MM. hh:mm');
    }
    setState('javascript.0.hydrawise.relay'+i+'_timeS', a );

//Ventil Typ (?)
    if (existsState('javascript.0.hydrawise.relay'+i+'_type')==false)
    {
        createState('javascript.0.hydrawise.relay'+i+'_type');
    }
    setState('javascript.0.hydrawise.relay'+i+'_type', data.relays[i].type ); 

//Ventil Typ (Erwartete Laufzwit + Restlaufzeit in Sekunden)
    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 );

//Ventil Typ (Erwartete Laufzeit + Restlaufzeit in Minuten)
    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) );

//Ventil Nummer 
    if (existsState('javascript.0.hydrawise.relay'+i+'_relay')==false)
    {
        createState('javascript.0.hydrawise.relay'+i+'_relay');
    }
    setState('javascript.0.hydrawise.relay'+i+'_relay', data.relays[i].relay );

//Ventil Name 
    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 );

//Ventil Period (???)
    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 );

//Ventil nächste Beregnung als String
    if (existsState('javascript.0.hydrawise.relay'+i+'_timestr')==false)
    {
        createState('javascript.0.hydrawise.relay'+i+'_timestr');
    }
    var a=data.relays[i].timestr;
    if (a=="Mon"){a="Montag";}
    if (a=="Tue"){a="Dienstag";}
    if (a=="Wed"){a="Mittwoch";}
    if (a=="Thu"){a="Donnerstag";}
    if (a=="Fri"){a="Freitag";}
    if (a=="Sat"){a="Samstag";}
    if (a=="Sun"){a="Sonntag";}
    setState('javascript.0.hydrawise.relay'+i+'_timestr',a  ); 

//Ventil stop (???)
    if (existsState('javascript.0.hydrawise.relay'+i+'_stop')==false)
    {
        createState('javascript.0.hydrawise.relay'+i+'_stop');
    }
    setState('javascript.0.hydrawise.relay'+i+'_stop', data.relays[i].stop );    
}

if ("undefined" !== typeof  data.sensors){    
//log (data.sensors);

//Sonsoren auslesen
var i;
    for (i = 0; i < data.sensors.length; i++) 
{
//Sensor Input
    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 ); 

//Sensor Type
    if (existsState('javascript.0.hydrawise.sensor'+i+'_type')==false)
    {
        createState('javascript.0.hydrawise.sensor'+i+'_type');
    }
    setState('javascript.0.hydrawise.sensor'+i+'_type', data.sensors[i].type ); 

//Sensor Mode
    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 ); 

//Sensor timer
    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 ); 

//Sensor offtimer
    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 ); 

//Sensor rate
    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 ); 

}
}

}
else{console.warn('Response in JSON nicht gefunden ! ')}

}
aDabbelju commented 1 year ago

Gibt es mittlerweile schon einen Adapter? Da ich mich mit der API vor kurzem beschäftigt habe, würde ich mich gerne mal daran probieren einen zu schreiben, fall es noch keinen gibt.

mcm1957 commented 1 year ago

Da dieser Issue noch auf "Requested" steht gehe icch davon aus, dass es keinen Adapter gibt - zumindest keinen "offiziellen".

Ev. frag nochmal im Forum nach, z.B. in dem Thread: https://forum.iobroker.net/topic/6564/hydrawise-bew%C3%A4sserungsseuerung/16

Weiters liefert Google einen Adapter (https://github.com/Andreili1000/ioBroker.hydrawise) der aber auf den ersten Blick nicht finalisiert wirkt bzw. keine eleases aufzuweisen scheint. Ev. kannst du mit dem Entwickler Kontakt aufnehmen.

ICh setz den Adapter mal auf planned und assigne ihn dir. Bitte lass uns wissen, wenn du mit einer Enticklung ernsthaft beginnst und/oder wenn du das Projekt einstellst.

Falls du Fragen hast, kannst du gerne im Forum und im Telegramm Channel Support bekommen.

Danke im Voraus für deinen Einsatz

mcm1957 commented 1 year ago

@DutchmanNL Grad erst gesehen, dass du dir den Request vor einiger Zeit assigned hast. Bist du da aktiv dran? Ansonsten assign ihn ev. an @aDabbelju

DutchmanNL commented 1 year ago

Gibt es mittlerweile schon einen Adapter? Da ich mich mit der API vor kurzem beschäftigt habe, würde ich mich gerne mal daran probieren einen zu schreiben, fall es noch keinen gibt.

Soweit mir bekannt noch nicht, wen du dich dem annehmen willst sehr gerne bei fragen und bissl Hilfe Stellung stehe ich gerne zur Verfügung und würde das issue dan auch an dich assignen ☺️

aDabbelju commented 1 year ago

@DutchmanNL Dann versuche ich mich einmal daran und melde mich bei Fragen einfach :-)

DutchmanNL commented 1 year ago

@DutchmanNL Dann versuche ich mich einmal daran und melde mich bei Fragen einfach :-)

Cool viel Erfolg! Können uns auch gerne mal im Discord treffen bei Interesse oder fragen ☺️

MichHan commented 1 year ago

Hi, super, dass es aufgenommen wird. Habe einen HC und Account. Stehe als Tester und mit Hardware / Zugang zur Verfügung. Einfach melden.

herb2805 commented 1 year ago

Würde mich auch gern als Tester anbieten. Grüße

SentiQ commented 12 months ago

@aDabbelju kann ich dich beim Adapter unterstützen? Mein Hydrawise Controller ist heute eingetroffen. Melde dich gern :)

SentiQ commented 12 months ago

Ich hatte die letzten Abende etwas Langeweile. Falls jemand testen möchte: https://github.com/SentiQ/ioBroker.hydrawise Aktuell nur auf einen Controller ausgelegt, da ich selbst nur einen besitze.

reneschuster commented 12 months ago

Die Installation und das Abrufen der Daten hat bisher funktioniert. Werde ich die Tage noch einmal genauer Testen. Schon mal vielen Dank.

mcm1957 commented 12 months ago

@SentiQ @aDabbelju

Hi Zunächst DANKE für deine / eure Arbeot. ABER könntet ihr mich bitte aufklären ob es da nun 2 Adapter gibt oder einen.

Es gibt die Repos:

https://github.com/aDabbelju/ioBroker.hydrawise https://github.com/SentiQ/ioBroker.hydrawise

Und es gibt npmjs

https://www.npmjs.com/package/iobroker.hydrawise

Das npmjs Verzeichnis verweist auf das aDabbelju Repository - enthält aber die Releasenotes von SentiQ.

Irgendwie ist das für mich (und wahrscheinlich auch User verwirrend). Welcher Code ist nun auf npm hochgeladen? @SentiQ hast du das Repo und Npm übernommen? Oder seid ihr eine Person???

Bitte um Info / Klarstellung bzw. was npm betrifft um Bereinigung soweit möglich.


Bezüglich Test: Bitte mach doch eien Therad im Forum auf (https://forum.iobroker.net/category/91/tester). Dort erreichst du mehr Testwillige als hier.

Und wenn der Adapter so halbwegs für User brauchbar ist, fordere bitte die Aufnahme in die Repos an. Wenn du dazu irgendweölche HIfle bracuchst, bite heri auder auf Telegramm melden.

McM1957

SentiQ commented 12 months ago

@mcm1957 sorry für die Verwirrung.

Ich habe eigentlich nur einen Fork angelegt und bisschen herum probiert und in dem Atemzug auch den npm-Release-Workflow mit getestet, da das neu für mich war. Habe bisher nichts von @aDabbelju gehört und wollte den Adapter gern für mich am Laufen haben. Bei npm ist derzeit der von mir angepasste Code.

mcm1957 commented 12 months ago

Danke mal für die Klarstellung dass ihr 2 Personen seid :-)

Alles klar - hab jetzt nochmal bei npmjs nachgesehen. Das NPM Archiv hast DU angelegt. Damit bist du jetzt der rechtmäßige "Eigentümer" des Adapters ioBroker.hydrawise. (npm ist strikt first come - first serve).

Was allerdings falsch sein dürfte sind die links in package.json und io-package.json. Die dürftest du nicht angepasst haben. Der ist der npmjs Link falsch.

Falls du den Forklink in Github weghaben willst kannst du folgendes machen: -) benenn deinen Fork um (z.B in ioBroker.hydrawise-fork) -) benutze github (web) um mittels IMPORT ein neues Repo ioBroker.hydrawise anzulegen. Da ist dann alles wie im jetzigen Repo drinnen. Ist einem Fork sehr sehr ähnliuch nur ohne Fork-Link

Verwende den repo checker (auf iobroker.dev z.B.) um allfällige Fehler (links z.B.) bei der Übernahme zu entdecken.

Und aus Höflichkeitsgründen wäre ein Hinweis auf den Originalauthor im README.md ev. angebraucht.

Bitte meld dich hier oder auf Telegramm (https://t.me/+gsX-e8k4mLtmZjZk) wenn du Hilfe bei der Finalisierung brauchst.

McM1957

mcm1957 commented 12 months ago

Nachtrag: Wirf bitte node 14 aus workflows/test-and-release.yml raus und trag node 18 und node 20 ein. Node 14 funktioniert seit Anfang dieser Woche nicht mehr bei Github Tests und wird von js-controller 5 nicht mehr unterstütz.

aDabbelju commented 11 months ago

Mit meinem Stand konnte ich lediglich die Daten abrufen, die jedoch nicht als State im iobroker angezeigt wurden. Dieser Stand ist also zum Testen noch nicht geeignet.

Grüße

SentiQ commented 11 months ago

@aDabbelju willst du daran weiter arbeiten oder ist es für dich okay, wenn ich das weiter übernehme?

aDabbelju commented 11 months ago

@aDabbelju willst du daran weiter arbeiten oder ist es für dich okay, wenn ich das weiter übernehme?

In den kommenden Wochen wollte ich das gerne mal fertig stellen, da ich selbst daran interessiert bin. In zwei Wochen habe ich wieder etwas Zeit und arbeite mich dort rein und melde mich hier nochmal. Wir können notfalls den Adapter in einer Session am Abend fertig stellen. Hoffentlich ist das okay für dich ☺️

SentiQ commented 11 months ago

@aDabbelju hast du Telegram? Melde dich gern mal direkt bei mir @sentiku

mcm1957 commented 11 months ago

@aDabbelju willst du daran weiter arbeiten oder ist es für dich okay, wenn ich das weiter übernehme?

In den kommenden Wochen wollte ich das gerne mal fertig stellen, da ich selbst daran interessiert bin. In zwei Wochen habe ich wieder etwas Zeit und arbeite mich dort rein und melde mich hier nochmal. Wir können notfalls den Adapter in einer Session am Abend fertig stellen. Hoffentlich ist das okay für dich ☺️

DANKE fürs Melden und deine Arbeit. Ich hab euch jetzt beide hier eingetragen. Gebt einfach Bescheid wenn der Adapter für einen Aufnahme in die Repositories bereit zu sein scheint. auch für dich @aDabbelju golt natürlich, dass du jede Hilfe bekommen kannst die du zur Finalisiserung brauchst. Einfach hier oder noch besser auf Telegramm (Link siehe oben) melden.

Und was NPM betrifft: Es ist definitiv möglich dass mehr als ein User vollen Zugriff auf ein NPM Repo hat. Detto sollte eine Übertragung möglich sein. Nur bitte nicht löschen - das blockiert soweit mir bekannt ist den Namen.

MichHan commented 11 months ago

Hi, habe es mal installiert. Werte werden sofort abgerufen und alles so, wie es sein soll. Die Ansteuerung funktioniert auch. Bei x Sekunden starten funktioniert das. Während dieses Laufes kann man nicht x Sekunden aussetzen. Stoppen geht aber. Die Werte wie timestr werden entsprechend aktualisiert (= "now").

Sieht gut aus.

Gruß

Michael

reneschuster commented 11 months ago

Bei mir läuft der Adapter leider nicht stabil, hat noch jemand solche Probleme?

image

pacco81 commented 10 months ago

Hi ! Geil, endlich ein Adapter ! Tausend Dank an die Entwickler. Mit den Scripten konnte ich nur scher umgehen.

Habe die v009 von SentIQ laufen und es hat auf Anhieb alles vom ProHC12 ausgelesen. Stop und run klappt auch.

Wie auch über das Script bekomme ich jedoch leider keine Sensordaten vom Flussensor sondern nur den Fixwert von "1.8927" bei "rate" der sich nie verändert. Aber das scheint API-seitig so zu sein. Hat einer von euch hier echte Durchflusswerte bei rate gesehen ?

Besten Dank und Gruß, Sebastian

P.S. Wenn der Adapter direkt die Unix-Zeit in den time-Datenpunkten umrechnen könnte, wäre das prima. Ich quäle mich da immer mit blockly zum umrechnen um.

Bildschirmfoto 2023-06-24 um 21 53 30
pacco81 commented 10 months ago

P.P.S Ich sehe gerade, dass für die einzelnen Beregnungskreise als Ordner-bezeichnung der Name von Hydrawise gezogen wird. Das gibt dann aber Huddel, wenn man bei Hydrawise die Bezeichnungen mal ändert, oder ?

Wäre eine generische Nummer 1,2,3 nicht besser und die sprechende Bezeichnungen als Datenpunkt eine Etage drunter ?

SentiQ commented 10 months ago

@pacco81 danke für deine Rückmeldung. Ich nehme mich der Punkte die Tage an.

mbhomie007 commented 10 months ago

Wird der Hunter Regensensor auch mit ausgelesen?

SentiQ commented 10 months ago

@mbhomie007 keiner der Sensoren übermittelt sinnvoll Werte. Hatte dazu direkt Kontakt mit Hydrawise. Die sind somit leider alle nicht brauchbar.

Beim Regensensor dürfte es aber zumindest on/off sein, prüfe ich mit.

mbhomie007 commented 10 months ago

Der Regensensor sagt ja nur "Ausgelöst - Bewässerung wird geblockt" oder "Nicht ausgelöst - Bewässerung wird nicht geblockt".

Also 1 oder 0.

Müsste doch auszulesen sein oder?

Wird jedenfalls unter der API angegeben. Screenshot_20230625_124919_Chrome.jpg

Jakoweb commented 10 months ago

Bei mir läuft der Adapter leider nicht stabil, hat noch jemand solche Probleme?

image

Ja, diese Probleme habe ich auch, auch wenn meine Logeinträge anders lauten:

09:30:46.952 info hydrawise.0 (621204) starting. Version 0.0.9 (non-npm: SentiQ/ioBroker.hydrawise#95f8352fe43b40f7bb6ecf6912db3d93b9859fd8) in /opt/iobroker/node_modules/iobroker.hydrawise, node: v18.16.0, js-controller: 4.0.24
09:30:47.012 info hydrawise.0 (621024) config apiKey: XXXX-XXXX-XXXX-XXXX
09:30:49.411 warn hydrawise.0 (623261) received 429 response from /api/v1/customerdetails.php with content: "Exceeded maximum number of requests. You cannot make more than 5 requests in any 5 minute period to this endpoint."
09:30:49.430 info hydrawise.0 (623261) terminating
09:30:49.432 warn hydrawise.0 (623261) Terminated (UNCAUGHT_EXCEPTION): Without reason

Dasselbe Spiel wiederholt sich solange, bis der Neustart wegen häufiger Abstürze unterbunden wird. Vorher ist der Adapter etwa 45 Minuten klaglos gelaufen. Es scheint, als würden im Laufe der Zeit die Abfragen nicht minütlich gestellt, sondern etwas schneller (oder die Serveruhr bei Hydrawise geht langsamer), so dass es zur Fehlermeldung kommt. Durch den Neustart wird eine wiederholte Abfrage gestartet, was natürlich ebenfalls nicht geht.

Ich sehe zwei Möglichkeiten zur Abhilfe:

  1. Verlängerung des Abfrageintervalls
  2. Abfangung der 429 response im Adapter, so dass dieser nicht terminiert, sondern eine weitere Minute (oder mehr?!) aussetzt.
SentiQ commented 10 months ago

@reneschuster @Jakoweb die Abstürze sollten mit 0.0.10 behoben sein

@pacco81 ich habe deinen Vorschlag mit der Ordnerbezeichnung umgesetzt. Unter "timestr" wird nun der Date-String der nächsten Bewässerung angezeigt. Die Sensoren übernehme ich 1:1 aus der API. Ich habe aktuell nur den Regensensor, den ich aber noch nicht getestet habe. Den Durchflusssensor installieren ich erst in den kommenden Wochen.

mbhomie007 commented 10 months ago

Wie sieht es mit der Aufnahme in die Repositories aus? 😁

reneschuster commented 10 months ago

@reneschuster @Jakoweb die Abstürze sollten mit 0.0.10 behoben sein

@pacco81 ich habe deinen Vorschlag mit der Ordnerbezeichnung umgesetzt. Unter "timestr" wird nun der Date-String der nächsten Bewässerung angezeigt. Die Sensoren übernehme ich 1:1 aus der API. Ich habe aktuell nur den Regensensor, den ich aber noch nicht getestet habe. Den Durchflusssensor installieren ich erst in den kommenden Wochen.

@SentiQ Vielen Dank für den Fix, läuft aber leider immer noch nicht stabil.

2023-06-28 11:32:36.586 - info: hydrawise.0 (4882) starting. Version 0.0.10 (non-npm: SentiQ/ioBroker.hydrawise#9687be3ac4a76100f3b723bf4af40777926b38d6) in /opt/iobroker/node_modules/iobroker.hydrawise, node: v18.16.1, js-controller: 4.0.24
2023-06-28 11:32:36.594 - info: hydrawise.0 (4882) config apiKey: XXXX-XXXX-XXXX-XXXX
2023-06-28 11:32:37.671 - warn: hydrawise.0 (4882) Object hydrawise.0.schedule.1 is invalid: obj.common.name has an invalid type! Expected "string" or "object", received "number"
2023-06-28 11:32:37.672 - warn: hydrawise.0 (4882) This object will not be created in future versions. Please report this to the developer.
2023-06-28 11:32:38.026 - warn: hydrawise.0 (4882) Object hydrawise.0.schedule.2 is invalid: obj.common.name has an invalid type! Expected "string" or "object", received "number"
2023-06-28 11:32:38.026 - warn: hydrawise.0 (4882) This object will not be created in future versions. Please report this to the developer.
2023-06-28 11:32:38.345 - warn: hydrawise.0 (4882) Object hydrawise.0.schedule.3 is invalid: obj.common.name has an invalid type! Expected "string" or "object", received "number"
2023-06-28 11:32:38.345 - warn: hydrawise.0 (4882) This object will not be created in future versions. Please report this to the developer.
2023-06-28 11:32:38.705 - warn: hydrawise.0 (4882) Object hydrawise.0.schedule.4 is invalid: obj.common.name has an invalid type! Expected "string" or "object", received "number"
2023-06-28 11:32:38.705 - warn: hydrawise.0 (4882) This object will not be created in future versions. Please report this to the developer.
2023-06-28 11:32:38.977 - warn: hydrawise.0 (4882) Object hydrawise.0.schedule.99 is invalid: obj.common.name has an invalid type! Expected "string" or "object", received "number"
2023-06-28 11:32:38.978 - warn: hydrawise.0 (4882) This object will not be created in future versions. Please report this to the developer.
2023-06-28 11:32:40.012 - info: hydrawise.0 (4882) State value to set for "hydrawise.0.customer.current_controller" has to be type "number" but received type "string"
2023-06-28 11:32:40.058 - info: hydrawise.0 (4882) State value to set for "hydrawise.0.customer.controllers.PRO-HC 6.last_contact" has to be type "string" but received type "number"
2023-06-28 11:35:39.598 - info: hydrawise.0 (4882) error ECONNABORTED from /api/v1/statusschedule.php: timeout of 3000ms exceeded
2023-06-28 11:35:39.599 - error: hydrawise.0 (4882) Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch().
2023-06-28 11:35:39.599 - error: hydrawise.0 (4882) unhandled promise rejection: Cannot read properties of undefined (reading 'status')
2023-06-28 11:35:39.599 - error: hydrawise.0 (4882) TypeError: Cannot read properties of undefined (reading 'status')
at /opt/iobroker/node_modules/iobroker.hydrawise/build/main.js:273:28
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
2023-06-28 11:35:39.599 - error: hydrawise.0 (4882) Cannot read properties of undefined (reading 'status')
2023-06-28 11:35:39.601 - info: hydrawise.0 (4882) terminating
2023-06-28 11:35:39.601 - warn: hydrawise.0 (4882) Terminated (UNCAUGHT_EXCEPTION): Without reason
2023-06-28 11:35:40.219 - error: host.iob instance system.adapter.hydrawise.0 terminated with code 6 (UNCAUGHT_EXCEPTION)