Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Entwicklung
  4. [Adapteranfrage] Orbit B-HYVE Ventil

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.3k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.3k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.6k

[Adapteranfrage] Orbit B-HYVE Ventil

Geplant Angeheftet Gesperrt Verschoben Entwicklung
adapterentwicklungventilgartenbewässerung
21 Beiträge 6 Kommentatoren 3.5k Aufrufe 8 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • T Offline
    T Offline
    tazdevil20
    schrieb am zuletzt editiert von tazdevil20
    #1

    Hallo zusammen,

    ich habe mir einen B-HYVE HOSE FAUCET TIMER bestellt: https://bhyve.orbitonline.com/hosefaucet/
    alt text
    Das ist ein Batteriebetriebenes Ventil um den Wasserzulauf für die Gartenbewässerung zu steuern. In meinem Fall habe ich eine kabellose Lösung gesucht, da ich an der Stelle keinen Strom habe und auch nur schwierig dort hin bekomme.
    Zusätzlich ist ein Durchflussmengenmesser eingebaut.

    Für Home Assistant gibt es eine Integration: https://github.com/sebr/bhyve-home-assistant
    Es gibt auch auf Github einen Übersetzung von von der inoffiziellen API auf MQTT: https://github.com/billchurch/bhyve-mqtt
    Auch für SmartThings gibt es eine Integration: https://community.smartthings.com/t/release-orbit-bhyve-controller-hose-faucet-timer-integration-smartapp/171730/76

    Jetzt mal zu meinem Anliegen:
    Ich kann inzwischen auch etwas JavaScript. Ich versteht auch teilweise die Vorgehensweise der vorhandenen Adapter von ioBroker. Ich wüsste jedoch nicht wie ich ein python-Script zu javascript portieren könnte. Zusätzlich basieren die Adapter auf websocket. Das ist dann doch etwas hoch für mich.

    Gibt es vielleicht einige, die das relativ einfach zu iobroker portieren können?

    Ein Issue auf Github ist eröffnet: https://github.com/ioBroker/AdapterRequests/issues/429

    Gruß
    Taz

    1 Antwort Letzte Antwort
    0
    • K Offline
      K Offline
      kenny384
      schrieb am zuletzt editiert von
      #2

      Ich schließe mich hier gerne an. Habe das Ventil noch nicht bestellt, aber eine Lösung es in Biobroker zu bekommen wäre ein klarer Kaufgrund neben dem Preis.

      1 Antwort Letzte Antwort
      0
      • B Offline
        B Offline
        backons
        schrieb am zuletzt editiert von
        #3

        Hallo,

        den ham-adapter installieren. Dort dann bei npm module das eintragen:
        homebridge-platform-orbit
        Das ist die Seite dazu:
        https://github.com/MortJC/homebridge-platform-orbit

        Von dort dann die Konfiguration übernehmen und anpassen.
        Dann lässt es sich über iobroker steuern.

        T M 2 Antworten Letzte Antwort
        0
        • B backons

          Hallo,

          den ham-adapter installieren. Dort dann bei npm module das eintragen:
          homebridge-platform-orbit
          Das ist die Seite dazu:
          https://github.com/MortJC/homebridge-platform-orbit

          Von dort dann die Konfiguration übernehmen und anpassen.
          Dann lässt es sich über iobroker steuern.

          T Offline
          T Offline
          tazdevil20
          schrieb am zuletzt editiert von tazdevil20
          #4

          @backons
          Danke für die Info. Habe ich natürlich mal gleich versucht, da ich mit meinem Script nicht wirklich vorwärts komme.
          Leider kann ich darüber nichts steuern (oder ich weiß nicht was ich mit den Werten anfangen soll):

          b4c87543-a967-442b-90b8-a6d27b141780-grafik.png

          Manche sind read-only. Die Werte die angepasst werden können bewirken jedoch nichts.

          Mir fehlen auch noch ganz viele andere Informationen (z. B. Device History um zu sehen wie viel Wasser verbraucht wurde).

          "Wasser" ist der Sprinkler-Timer. Der Hub wird nicht aufgeführt.
          "Garten" ist meine Zone.

          Mir persönlich würde es schon genügen wenn ich die Historie, Batteriezustand und eine Möglichkeit das Teil zu öffnen/schließen habe.

          In meinem zusammengestückelten Script (kein Adapter) aus den verlinkten Projekten bekomme ich immerhin schon ein paar JSONs mit Informationen. Jedoch genau die von mir gewünschten noch nicht. Ich blicke das einfach noch nicht wie das funktionieren soll.

          Grundsätzlich ist das Teil ok. Beim Öffnen/Schließen ist es recht laut (knallgeräusch). In der App bekommt man recht wenig Informationen. Diese werden aber auf der Webseite https://techsupport.orbitbhyve.com dargestellt.

          EDIT

          Scheinbar gab es ein Problem bei der Ersteinrichtung. Das habe ich festgestellt, nachdem ich mir Home Automation installiert habe um dann mir deren Adapter mal anzuschauen. Nach der Neueinrichtung funktioniert es nun. Auch in meinem JSON habe ich den Batterie-Level.
          Auch mit dem HAM kann ich nun Öffnen/Schließen. Aktuell ist noch das Problem, dass das nur für 240 Sekunden funktioniert. Der Wert ist scheinbar festgeschrieben. Werde ich mir aber noch genauer anschauen.

          1 Antwort Letzte Antwort
          0
          • K Offline
            K Offline
            kenny384
            schrieb am zuletzt editiert von kenny384
            #5

            @backons Danke für den Tipp. Habe ich auch installiert und scheint zu funktionieren. @tazdevil20 Wie hast du die Bewässerung über iobroker gestartet? Finde auf Anhieb keinen vom Namen her passenden Datenpunkt.

            1 Antwort Letzte Antwort
            0
            • K Offline
              K Offline
              kenny384
              schrieb am zuletzt editiert von
              #6

              @tazdevil20 Sorry, zu früh geschrieben, ich habe es eben selber gefunden. Active muss man auf "1" setzen. Und ich glaube ich habe auch dein Problem mit der Bewässerungsdauer gelöst. Du musst eigentlich nur den Wert Set-Duration (in Sekunden) hoch setzen. Habe da mal 600 eingetragen, dann lief es auch manuell gestartet 10 Minuten.

              Bildschirmfoto 2020-07-27 um 10.13.16.png

              T HauWi112H 2 Antworten Letzte Antwort
              0
              • K kenny384

                @tazdevil20 Sorry, zu früh geschrieben, ich habe es eben selber gefunden. Active muss man auf "1" setzen. Und ich glaube ich habe auch dein Problem mit der Bewässerungsdauer gelöst. Du musst eigentlich nur den Wert Set-Duration (in Sekunden) hoch setzen. Habe da mal 600 eingetragen, dann lief es auch manuell gestartet 10 Minuten.

                Bildschirmfoto 2020-07-27 um 10.13.16.png

                T Offline
                T Offline
                tazdevil20
                schrieb am zuletzt editiert von
                #7

                @kenny384
                Danke. Mal kurz probiert und Set-Duration auf 3600 gestellt. Interessat ist, dass dann beim Einschalten der Wert Remaining-Duration (das ist der Wert wie lange geöffnet ist) auf 3540 gestellt wird. Die Vorherigen Werte bei mir waren 300/240. Scheinbar wird immer eine Minute abgezogen.

                Wenn ich mit dem Script soweit bin kann ich es gerne bereitstellen. Das muss ich aber noch ordentlich aufräumen und ich suche noch nach der Möglichkeit mir den Wasserverbrauch anzeigen zu lassen.

                K 2 Antworten Letzte Antwort
                0
                • T tazdevil20

                  @kenny384
                  Danke. Mal kurz probiert und Set-Duration auf 3600 gestellt. Interessat ist, dass dann beim Einschalten der Wert Remaining-Duration (das ist der Wert wie lange geöffnet ist) auf 3540 gestellt wird. Die Vorherigen Werte bei mir waren 300/240. Scheinbar wird immer eine Minute abgezogen.

                  Wenn ich mit dem Script soweit bin kann ich es gerne bereitstellen. Das muss ich aber noch ordentlich aufräumen und ich suche noch nach der Möglichkeit mir den Wasserverbrauch anzeigen zu lassen.

                  K Offline
                  K Offline
                  kenny384
                  schrieb am zuletzt editiert von
                  #8

                  @tazdevil20 Das mit der remaining duration ist mir auch aufgefallen. Einfache Erklärung habe ich aber auch schon: Wenn die letzte Minute runterläuft, steht das schon auf Null, aber läuft noch die Minute weiter. Also er scheint quasi dafür irgendwie den Minuten-Wert auszulesen (in der letzten Minute dann ja sogesehen 0:59, 0:58 etc.)

                  1 Antwort Letzte Antwort
                  0
                  • T tazdevil20

                    @kenny384
                    Danke. Mal kurz probiert und Set-Duration auf 3600 gestellt. Interessat ist, dass dann beim Einschalten der Wert Remaining-Duration (das ist der Wert wie lange geöffnet ist) auf 3540 gestellt wird. Die Vorherigen Werte bei mir waren 300/240. Scheinbar wird immer eine Minute abgezogen.

                    Wenn ich mit dem Script soweit bin kann ich es gerne bereitstellen. Das muss ich aber noch ordentlich aufräumen und ich suche noch nach der Möglichkeit mir den Wasserverbrauch anzeigen zu lassen.

                    K Offline
                    K Offline
                    kenny384
                    schrieb am zuletzt editiert von
                    #9

                    @tazdevil20 sagte in [Adapteranfrage] Orbit B-HYVE Ventil:

                    Wenn ich mit dem Script soweit bin kann ich es gerne bereitstellen. Das muss ich aber noch ordentlich aufräumen und ich suche noch nach der Möglichkeit mir den Wasserverbrauch anzeigen zu lassen.

                    Das wäre natürlich super. Ich lasse das aktuell über die intelligente Automatik laufen von Orbit. So richtig intelligent agiert die aber nicht, finde ich. Oder sie ist intelligenter als ich und deswegen verstehe ich sie manchmal nicht ;-)

                    1 Antwort Letzte Antwort
                    0
                    • B Offline
                      B Offline
                      backons
                      schrieb am zuletzt editiert von
                      #10

                      @tazdevil20 @kenny384 So wie ich sehe habt ihr das meiste ja schon selbst gelöst...

                      Mein bewässerungsscript schreibt zuerst einen Wert in Set Duration und dann aktualisiert er den Active Datenpunkt.
                      Ich habe das ganz sowohl mit dem genannten Ventil als auch mit der größeren Steuerung mit 6 Ventilen am laufen...

                      Tipp am Rande: ich lasse den Ham-Adapter einmal jede Nacht neustarten. Ich hatte teilweise das Phänomen, dass er nach ein paar Tagen nicht mehr reagiert hat oder er die Zeit bei Setduration nicht mehr genommen hat. Das ist seit den täglichen Neustarts weg.

                      K 1 Antwort Letzte Antwort
                      0
                      • B backons

                        @tazdevil20 @kenny384 So wie ich sehe habt ihr das meiste ja schon selbst gelöst...

                        Mein bewässerungsscript schreibt zuerst einen Wert in Set Duration und dann aktualisiert er den Active Datenpunkt.
                        Ich habe das ganz sowohl mit dem genannten Ventil als auch mit der größeren Steuerung mit 6 Ventilen am laufen...

                        Tipp am Rande: ich lasse den Ham-Adapter einmal jede Nacht neustarten. Ich hatte teilweise das Phänomen, dass er nach ein paar Tagen nicht mehr reagiert hat oder er die Zeit bei Setduration nicht mehr genommen hat. Das ist seit den täglichen Neustarts weg.

                        K Offline
                        K Offline
                        kenny384
                        schrieb am zuletzt editiert von
                        #11

                        @backons Ja, danke dir nochmal.
                        Was berücksichtigt dein Skript denn so? Idealerweise muss ja irgendwie Wetter/Temperatur und Niederschlag/Bodenfeuchtigkeit rein. Ich habe bisher keine Sensoren im Garten und überlege noch, wie ich am einfachsten eine Lösung schaffe, die nicht nur den Wetterbericht berücksichtigt.

                        1 Antwort Letzte Antwort
                        0
                        • OstfrieseUnterwegsO Offline
                          OstfrieseUnterwegsO Offline
                          OstfrieseUnterwegs
                          schrieb am zuletzt editiert von
                          #12

                          Habt Ihr nur das Ventil, oder brauchts noch irgendein Gateway?

                          K T 2 Antworten Letzte Antwort
                          0
                          • OstfrieseUnterwegsO OstfrieseUnterwegs

                            Habt Ihr nur das Ventil, oder brauchts noch irgendein Gateway?

                            K Offline
                            K Offline
                            kenny384
                            schrieb am zuletzt editiert von
                            #13

                            @OstfrieseUnterwegs Ich habe auch das Gateway, ich weiß nicht ob das ganze hier auch ohne gehen würde.

                            1 Antwort Letzte Antwort
                            0
                            • OstfrieseUnterwegsO OstfrieseUnterwegs

                              Habt Ihr nur das Ventil, oder brauchts noch irgendein Gateway?

                              T Offline
                              T Offline
                              tazdevil20
                              schrieb am zuletzt editiert von
                              #14

                              @OstfrieseUnterwegs
                              Wenn Du nur das Ventil hast funktioniert das über Bluetooth mit dem Handy über die App.
                              Um es über ioBroker zu steuern ist der Hub zwingend notwendig. Dieser verbindet das Ventil mittels Bluetooth und ist auch gleichzeitig im WLAN.

                              @kenny384
                              Von meinem Script nicht zuviel erwarten. Ich möchte einfach nur die Batterieanzeige noch haben und idealerweise noch wissen wieviel Wasser ich pro Tag "verschwendet" habe.
                              Batterie ist kein Thema. Jedoch kann ich in dem JSON noch nicht sehen wieviel Wasser verbraucht wurde. Auf der Homepage und in der App von Orbit schon. Die Daten müssen entsprechend vorhanden sein.

                              @backons
                              Danke für den Tipp mit dem Neustart. Hatte heute morgen auch das Gefühl (nicht genauer betrachtet), dass ich keine Verbindung mehr zu dem Ventil hatte. Nach einem Neustart (war einfach nur ein Test) schon.

                              Ich habe aktuell auch keine Bodenfeuchtesensoren im Garten. Preisgünstig sind die von xiaomi welche jedoch eigentlich nicht für außen gedacht sind und auch nur mittels Bluetooth und nicht über Zigbee laufen. Ansonsten habe ich mich mal mit einer Eigenbaulösung versucht. Daran bin ich aber gescheitert, da ich zu wenig Löt erfahrung habe.

                              Ich starte über ein Script meine Bewässerung. Habe hinter dem Orbit-Ventil noch vier Magnetventile welche dann die je eine Wasserpipeline versorgen. Diese werden im Abstand von x Minuten abgewechselt. Ich möchte an der Stelle auch keine intelligente Automatisierung, da vorher noch der Mähroboter fahren soll und davor muss der Garten Kinderfrei und aufgeräumt sein.

                              1 Antwort Letzte Antwort
                              0
                              • T Offline
                                T Offline
                                tazdevil20
                                schrieb am zuletzt editiert von tazdevil20
                                #15

                                Hi,

                                nach ein paar Schwierigkeiten mit dem Gerät habe ich es halbwegs zufriedenstellend gelöst.
                                Das nur mal nebenbei: Ich habe den Filter ausgebaut und einen Dichtring ohne Filter eingesetzt. Danach haben meine Sprinkler wieder annähernd das gemacht was sie sollten. Problem ist bei mir, dass der Wasserdruck nicht so hoch ist.

                                Das zusätzliche Script zu dem Bedienen ist für meine Bedürfnisse fertig. Ist ganz sicher nicht wirklich gut gebaut und ist auch vieles "geklaut", da ich von Websocket keine Ahnung habe.

                                Es müssen ein paar Parameter manuell im Script gesetzt werden und die Objekte in ioBroker werden auch nicht automatisiert erstellt.

                                Ich habe nur die Dinge herausgepickt welche für mich interessant sind.

                                Es darf natürlich jeder das Script verbessern :blush:

                                EDIT: Habe das Script angepasst um die Historie des Ventils komplett auszulesen und als JSON in ein Objekt zu schreiben.
                                EDIT2: Da ich gerade dran bin. Kleine Verbesserung des History-JSON (saubere Sortierung wenn mehrfach am Tag eingeschaltet und Laufzeit nicht in Dezimal dargestellt)

                                /*
                                 * orbit.js
                                 *
                                 * unofficial Orbit Bhyve API module
                                 * Bill Church - https://github.com/billchurch/bhyve-mqtt
                                 *
                                 */
                                
                                //todo implement https://github.com/websockets/ws/wiki/client-auto-reconnect-with-ping-listener---exponential-back-off-timeout
                                
                                const axios = require('axios')
                                const EventEmitter = require('events').EventEmitter
                                const inherits = require('util').inherits
                                const WebSocket = require('ws')
                                const Ajv = require('ajv')
                                let ts = () => new Date().toISOString()
                                
                                var mCLIENT_ONLINE = false
                                var MCLIENT_ONLINE = false
                                var DevicesJSON, WateringJSON, device_id, feed;
                                var obj = [];
                                var objtmp = [];
                                
                                // ************************************************************
                                var man_deviceID = 'Die Device ID des Ventils (zu finden z. B. hier https://techsupport.orbitbhyve.com)'
                                var man_email = 'Orbit eMail-Adresse hier eintragen!'
                                var man_password = 'Orbit Passwort hier eintragen'
                                var wateringJSON_iobroker = 'javascript.0.bHyve.Watering_JSON';
                                // ************************************************************
                                
                                function minTommss(minutes){
                                 var sign = minutes < 0 ? "-" : "";
                                 var min = Math.floor(Math.abs(minutes));
                                 var sec = Math.floor((Math.abs(minutes) * 60) % 60);
                                 return sign + (min < 10 ? "0" : "") + min + ":" + (sec < 10 ? "0" : "") + sec;
                                }
                                
                                function Client () {
                                  if (!(this instanceof Client)) { return new Client() }
                                  EventEmitter.call(this)
                                
                                  this.config = {
                                    wssURL: undefined,
                                    baseURL: undefined,
                                    timeout: undefined,
                                    email: undefined,
                                    password: undefined,
                                    debug: undefined
                                  }
                                  this._token = undefined
                                  this._user_id = undefined
                                  this._device_id = undefined
                                }
                                inherits(Client, EventEmitter)
                                
                                // first step, get a token and generate an event on success or fail
                                Client.prototype.connect = function (cfg) {
                                  this.config.baseURL = cfg.baseURL || 'https://api.orbitbhyve.com'
                                  this.config.timeout = cfg.timeout || 10000
                                  this.config.email = cfg.email || undefined
                                  this.config.password = cfg.password || undefined
                                  this.config.wssURL = cfg.wssURL || 'wss://api.orbitbhyve.com/v1/events'
                                    this.config.wsTimeout = cfg.wsTimeout || 10000
                                  this.config.debug = cfg.debug || true
                                  var self = this
                                
                                  const getOrbitToken = () => {
                                    return new Promise((resolve, reject) => {
                                      const instance = axios.create({
                                        baseURL: self.config.baseURL,
                                        timeout: self.config.timeout
                                      })
                                      instance.post('/v1/session', {
                                        'session': {
                                          'email': self.config.email,
                                          'password': self.config.password
                                        }
                                      }).then(function (response) {
                                        self._token = response.data.orbit_session_token
                                        self._user_id = response.data.user_id
                                        // config for later sessions
                                        self._rest_config = { baseURL: self.config.baseURL, timeout: self.config.timeout, headers: { 'orbit-session-token': self._token } }
                                        //if (self.config.debug) log(`${ts()} - response.data: ` + JSON.stringify(response.data))
                                        resolve(response)
                                      }).catch(function (err) {
                                        reject(err)
                                      })
                                    })
                                  }
                                
                                  const doAccept = (response) => {
                                    //if (self.config.debug) log(`${ts()} - token: ` + self._token + ' My UserID: ' + self._user_id)
                                    self.emit('token', self._token)
                                    self.emit('user_id', self._user_id)
                                  }
                                  const doReject = (err) => {
                                    if (self.config.debug) log(`${ts()} - error ` + err)
                                    self.emit('error', err)
                                  }
                                
                                  let ost = getOrbitToken()
                                  ost.then(doAccept)
                                    .catch(doReject)
                                }
                                
                                Client.prototype.devices = function () {
                                  var self = this
                                
                                  const getDevices = () => {
                                    return new Promise((resolve, reject) => {
                                      const instance = axios.create(self._rest_config)
                                      
                                      instance.get('/v1/devices?user_id=' + self._user_id)
                                        .then(function (response) {
                                          if (self.config.debug) {
                                            //log(`${ts()} - response.json: ` + JSON.stringify(response.data))
                                            DevicesJSON = response.data
                                          } 
                                          self._device_id = response.data[0].id
                                          device_id = response.data[1].id
                                          
                                          resolve(response)
                                        }).catch(function (err) {
                                          reject(err)
                                        })
                                
                                        instance.get('/v1/watering_events/' + man_deviceID)
                                        .then(function (response_watering) {
                                            //log(`${ts()} - response.json - watering_events: ` + JSON.stringify(response.data))
                                            WateringJSON = response_watering.data
                                
                                            for (var i = 0; i < Object.keys(WateringJSON).length; i++) {
                                                objtmp = [];
                                                for (var j = 0; j < Object.keys(WateringJSON[i].irrigation).length; j++) {
                                                    let watering_start = formatDate(WateringJSON[i].irrigation[j].start_time, 'DD.MM. hh:mm');
                                                    let watering_runtime =  minTommss(parseFloat(Number(parseFloat(WateringJSON[i].irrigation[j].run_time)).toFixed(2)));
                                                    let watering_liter = parseFloat(Number((WateringJSON[i].irrigation[j].water_volume_gal)*3.78541).toFixed(2));
                                
                                                    feed = {Start: watering_start, Laufzeit: watering_runtime + " min",Liter: watering_liter}
                                                    if(j==0) {
                                                        objtmp.push(feed);
                                                    } else {
                                                        objtmp.unshift(feed);
                                                    }
                                                };
                                                obj = obj.concat(objtmp)
                                            };
                                            setState(wateringJSON_iobroker, JSON.stringify(obj));
                                            //resolve(response_watering)
                                        }).catch(function (err) {
                                          //reject(err)
                                        })
                                    })
                                  }
                                
                                  const doAccept = (response) => {
                                    //if (self.config.debug) console.log(`${ts()} - response.data2: ` + JSON.stringify(response.data))
                                    self.emit('devices', response.data)
                                    self.emit('device_id', self._device_id)
                                  }
                                
                                  const doReject = (err) => {
                                    if (self.config.debug) log(`${ts()} - error: ` + err)
                                    self.emit('error', err)
                                  }
                                
                                  let Devices = getDevices()
                                  Devices.then(doAccept)
                                    .catch(doReject)
                                }
                                
                                Client.prototype.send = function (message) {
                                  var self = this
                                
                                  self._stream.send(JSON.stringify(message))
                                  log('send json: ' + JSON.stringify(message))
                                }
                                
                                Client.prototype.connectStream = function () {
                                  var self = this
                                
                                  self._stream = new WebSocket(self.config.wssURL, {
                                    handshakeTimeout: self.config.wsTimeout
                                  })
                                
                                  function sendPing() {
                                    if (self.config.debug) log(`${ts()} - websocket sending ping`)
                                    self._stream.send('{"event":"ping"}')
                                    log("ping")
                                  }
                                
                                  const authenticate = () => {
                                    let message = {
                                      'event': 'app_connection',
                                      'orbit_session_token': self._token
                                    }
                                
                                    if (self.config.debug) log(`${ts()} - websocket authenticate message: ` + JSON.stringify(message))
                                
                                    self._stream.send(JSON.stringify(message))
                                    setInterval(sendPing, 25 * 1000)
                                  }
                                
                                  self._stream.on('open', authenticate)
                                
                                  self._stream.on('message', function (data) {
                                    self.emit('message', JSON.parse(data))
                                  })
                                
                                  self._stream.on('error', function (err) {
                                    self.emit('error', err)
                                  })
                                
                                  self._stream.on('close', function (num, reason) {
                                    if (self.config.debug) log(`${ts()} - close: ` + num + ' reason: ' + reason)
                                  })
                                
                                  self._stream.on('ping', function (data) {
                                    if (self.config.debug) log(`${ts()} - ping data: ` + data)
                                  })
                                
                                  self._stream.on('unexpected-response', function (request, response) {
                                    console.error(`${ts()} - unexpected-response / request: ` + request + ' response: ' + response)
                                  })
                                }
                                
                                //Vorbereitung für Login
                                var oClient = Client();
                                
                                //Login
                                oClient.connect({
                                    email: man_email,
                                    password: man_password
                                });
                                
                                //get Token
                                oClient.on('token', (token) => {
                                  //if (MCLIENT_ONLINE) mClient.publish('bhyve/alive', ts(), publishHandler)
                                  //console.log(`${ts()} - Token: ${token}`)
                                })
                                
                                oClient.on('user_id', (userId) => {
                                  //console.log(`${ts()} - user_id: ${userId}`)
                                  oClient.devices()
                                })
                                
                                oClient.on('device_id', (deviceId) => {
                                  //console.log(`${ts()} - device_id: ${deviceId}`)
                                })
                                
                                oClient.on('devices', (data) => {
                                    var objects = JSON.parse(JSON.stringify(DevicesJSON))
                                    objects.forEach(function(key, index){
                                        //log("Name: " + key.name); 
                                        //log("Type: " + key.type);
                                        //log("Firmware-Version: " + key.firmware_version);
                                        //log("Hardware-Version: " + key.hardware_version);
                                        if(key.type == "bridge") {
                                            //log("Last connect: " + key.last_connected_at);
                                        };
                                        //log("MAC: " + key.mac_address);
                                        //log("Connected: " + key.is_connected);
                                        if(key.type == "sprinkler_timer") {
                                            //log("Run-Mode: " + key.status.run_mode);
                                            //log("Battery: " + key.battery.percent);
                                            setState('javascript.0.bHyve.Battery', key.battery.percent);
                                        }
                                    });
                                });
                                
                                
                                HauWi112H 1 Antwort Letzte Antwort
                                0
                                • T Offline
                                  T Offline
                                  tazdevil20
                                  schrieb am zuletzt editiert von
                                  #16

                                  noch ein Update:
                                  Mich hat es gestört, dass ich nur maximal 3600 Sekunden (Objekt ist darauf beschränkt und anpassen hat nichts gebracht) das Wasser laufen lassen kann. Teilweise benötige ich auf grund der 4 Pipelines mehr Zeit. Meine Lösung war nun, dass ich die platform.js des Homebridge Moduls angepasst habe:

                                  Zeile 301:

                                  let run_time = valveService.getCharacteristic(Characteristic.SetDuration).value / 60;
                                  

                                  geändert auf

                                  let run_time = valveService.getCharacteristic(Characteristic.SetDuration).value;
                                  

                                  Zeile 341:

                                  service.getCharacteristic(Characteristic.RemainingDuration).updateValue(jsonData['run_time'] * 60);
                                  

                                  geändert auf

                                  service.getCharacteristic(Characteristic.RemainingDuration).updateValue(jsonData['run_time']);
                                  

                                  Somit gebe ich keine Sekunden mehr vor sondern Minuten. Über das Bewässerungsscript lasse ich das Ventil eh schließen. Somit ist das nur der doppelte Boden.

                                  1 Antwort Letzte Antwort
                                  0
                                  • K kenny384

                                    @tazdevil20 Sorry, zu früh geschrieben, ich habe es eben selber gefunden. Active muss man auf "1" setzen. Und ich glaube ich habe auch dein Problem mit der Bewässerungsdauer gelöst. Du musst eigentlich nur den Wert Set-Duration (in Sekunden) hoch setzen. Habe da mal 600 eingetragen, dann lief es auch manuell gestartet 10 Minuten.

                                    Bildschirmfoto 2020-07-27 um 10.13.16.png

                                    HauWi112H Offline
                                    HauWi112H Offline
                                    HauWi112
                                    schrieb am zuletzt editiert von
                                    #17

                                    @kenny384 sagte in [Adapteranfrage] Orbit B-HYVE Ventil:

                                    @tazdevil20 Sorry, zu früh geschrieben, ich habe es eben selber gefunden. Active muss man auf "1" setzen. Und ich glaube ich habe auch dein Problem mit der Bewässerungsdauer gelöst. Du musst eigentlich nur den Wert Set-Duration (in Sekunden) hoch setzen. Habe da mal 600 eingetragen, dann lief es auch manuell gestartet 10 Minuten.

                                    Bildschirmfoto 2020-07-27 um 10.13.16.png

                                    Hallo,
                                    egal, auf welchen wert ich "Set-Duration" setze...
                                    nach dem "Akivieren" wird immer 5min bewässert. Was mache ich falsch?

                                    708f4839-ed0b-4379-b93e-fb8bf25bfd0a-grafik.png
                                    a70e11e4-7ed5-4670-ba17-e99377001908-grafik.png

                                    vielen Dank im Voraus!

                                    1 Antwort Letzte Antwort
                                    0
                                    • B backons

                                      Hallo,

                                      den ham-adapter installieren. Dort dann bei npm module das eintragen:
                                      homebridge-platform-orbit
                                      Das ist die Seite dazu:
                                      https://github.com/MortJC/homebridge-platform-orbit

                                      Von dort dann die Konfiguration übernehmen und anpassen.
                                      Dann lässt es sich über iobroker steuern.

                                      M Offline
                                      M Offline
                                      MichaR
                                      schrieb am zuletzt editiert von
                                      #18

                                      @backons sagte in [Adapteranfrage] Orbit B-HYVE Ventil:

                                      Hallo,

                                      den ham-adapter installieren. Dort dann bei npm module das eintragen:
                                      homebridge-platform-orbit
                                      Das ist die Seite dazu:
                                      https://github.com/MortJC/homebridge-platform-orbit

                                      Von dort dann die Konfiguration übernehmen und anpassen.
                                      Dann lässt es sich über iobroker steuern.

                                      Hallo,
                                      ich habe mal diesen Thread ausgegraben, weil ich mir gerade 7 Stück orbit-Ventile installiert habe und ich diese im ioBroker nicht zum laufen bringe. Ich würde diese gern über ioBroker/Raspberrymatic steuern.
                                      Ich habe im ioBroker den ham installiert. In der Konfigurationsdatei ist als Beispielname "orbit" eingetragen. Sorry, welcher Name kommt dort hin? Habe meinen Accountnamen (Vor- und Nachname) eingetragen, den Ventilnamen, den Gruppennamen, aber es wird kein Objekt angelegt. Die Instanz ham läuft und laut log auch ohne Fehler, leider auch ohne Objekt. Hat jemand einen Tip? Vielen Dank.
                                      Hier mal mein log-file:
                                      ham.0 2021-07-27 12:15:41.599 info (18475) All Libraries installed/updated
                                      ham.0 2021-07-27 12:15:41.598 info (18475) Install/Update homebridge-platform-orbit
                                      ham.0 2021-07-27 12:15:41.598 info (18475) Install/Update the following Libraries: homebridge-platform-orbit
                                      ham.0 2021-07-27 12:15:41.584 info (18475) starting. Version 4.0.2 in /opt/iobroker/node_modules/iobroker.ham, node: v12.21.0, js-controller: 3.2.16
                                      ham.0 2021-07-27 12:15:37.920 info (18357) Terminated (ADAPTER_REQUESTED_TERMINATION): Without reason
                                      ham.0 2021-07-27 12:15:37.919 info (18357) terminating
                                      ham.0 2021-07-27 12:15:37.876 info (18357) cleaned everything up...
                                      ham.0 2021-07-27 12:15:37.875 info (18357) Got terminate signal TERMINATE_YOURSELF
                                      ham.0 2021-07-27 12:14:00.774 info (18357) All Libraries installed/updated
                                      ham.0 2021-07-27 12:14:00.773 info (18357) Install/Update homebridge-platform-orbit
                                      ham.0 2021-07-27 12:14:00.773 info (18357) Install/Update the following Libraries: homebridge-platform-orbit
                                      ham.0 2021-07-27 12:14:00.752 info (18357) starting. Version 4.0.2 in /opt/iobroker/node_modules/iobroker.ham, node: v12.21.0, js-controller: 3.2.16
                                      ham.0 2021-07-27 12:13:57.137 info (18254) Terminated (ADAPTER_REQUESTED_TERMINATION): Without reason
                                      ham.0 2021-07-27 12:13:57.137 info (18254) terminating
                                      ham.0 2021-07-27 12:13:57.060 info (18254) cleaned everything up...
                                      ham.0 2021-07-27 12:13:57.059 info (18254) Got terminate signal TERMINATE_YOURSELF
                                      ham.0 2021-07-27 12:12:18.550 info (18254) All Libraries installed/updated
                                      ham.0 2021-07-27 12:12:18.549 info (18254) Install/Update homebridge-platform-orbit
                                      ham.0 2021-07-27 12:12:18.549 info (18254) Install/Update the following Libraries: homebridge-platform-orbit
                                      ham.0 2021-07-27 12:12:18.535 info (18254) starting. Version 4.0.2 in /opt/iobroker/node_modules/iobroker.ham, node: v12.21.0, js-controller: 3.2.16
                                      ham.0 2021-07-27 12:12:14.795 info (17370) Terminated (ADAPTER_REQUESTED_TERMINATION): Without reason
                                      ham.0 2021-07-27 12:12:14.794 info (17370) terminating
                                      ham.0 2021-07-27 12:12:14.748 info (17370) cleaned everything up...

                                      M 1 Antwort Letzte Antwort
                                      0
                                      • M MichaR

                                        @backons sagte in [Adapteranfrage] Orbit B-HYVE Ventil:

                                        Hallo,

                                        den ham-adapter installieren. Dort dann bei npm module das eintragen:
                                        homebridge-platform-orbit
                                        Das ist die Seite dazu:
                                        https://github.com/MortJC/homebridge-platform-orbit

                                        Von dort dann die Konfiguration übernehmen und anpassen.
                                        Dann lässt es sich über iobroker steuern.

                                        Hallo,
                                        ich habe mal diesen Thread ausgegraben, weil ich mir gerade 7 Stück orbit-Ventile installiert habe und ich diese im ioBroker nicht zum laufen bringe. Ich würde diese gern über ioBroker/Raspberrymatic steuern.
                                        Ich habe im ioBroker den ham installiert. In der Konfigurationsdatei ist als Beispielname "orbit" eingetragen. Sorry, welcher Name kommt dort hin? Habe meinen Accountnamen (Vor- und Nachname) eingetragen, den Ventilnamen, den Gruppennamen, aber es wird kein Objekt angelegt. Die Instanz ham läuft und laut log auch ohne Fehler, leider auch ohne Objekt. Hat jemand einen Tip? Vielen Dank.
                                        Hier mal mein log-file:
                                        ham.0 2021-07-27 12:15:41.599 info (18475) All Libraries installed/updated
                                        ham.0 2021-07-27 12:15:41.598 info (18475) Install/Update homebridge-platform-orbit
                                        ham.0 2021-07-27 12:15:41.598 info (18475) Install/Update the following Libraries: homebridge-platform-orbit
                                        ham.0 2021-07-27 12:15:41.584 info (18475) starting. Version 4.0.2 in /opt/iobroker/node_modules/iobroker.ham, node: v12.21.0, js-controller: 3.2.16
                                        ham.0 2021-07-27 12:15:37.920 info (18357) Terminated (ADAPTER_REQUESTED_TERMINATION): Without reason
                                        ham.0 2021-07-27 12:15:37.919 info (18357) terminating
                                        ham.0 2021-07-27 12:15:37.876 info (18357) cleaned everything up...
                                        ham.0 2021-07-27 12:15:37.875 info (18357) Got terminate signal TERMINATE_YOURSELF
                                        ham.0 2021-07-27 12:14:00.774 info (18357) All Libraries installed/updated
                                        ham.0 2021-07-27 12:14:00.773 info (18357) Install/Update homebridge-platform-orbit
                                        ham.0 2021-07-27 12:14:00.773 info (18357) Install/Update the following Libraries: homebridge-platform-orbit
                                        ham.0 2021-07-27 12:14:00.752 info (18357) starting. Version 4.0.2 in /opt/iobroker/node_modules/iobroker.ham, node: v12.21.0, js-controller: 3.2.16
                                        ham.0 2021-07-27 12:13:57.137 info (18254) Terminated (ADAPTER_REQUESTED_TERMINATION): Without reason
                                        ham.0 2021-07-27 12:13:57.137 info (18254) terminating
                                        ham.0 2021-07-27 12:13:57.060 info (18254) cleaned everything up...
                                        ham.0 2021-07-27 12:13:57.059 info (18254) Got terminate signal TERMINATE_YOURSELF
                                        ham.0 2021-07-27 12:12:18.550 info (18254) All Libraries installed/updated
                                        ham.0 2021-07-27 12:12:18.549 info (18254) Install/Update homebridge-platform-orbit
                                        ham.0 2021-07-27 12:12:18.549 info (18254) Install/Update the following Libraries: homebridge-platform-orbit
                                        ham.0 2021-07-27 12:12:18.535 info (18254) starting. Version 4.0.2 in /opt/iobroker/node_modules/iobroker.ham, node: v12.21.0, js-controller: 3.2.16
                                        ham.0 2021-07-27 12:12:14.795 info (17370) Terminated (ADAPTER_REQUESTED_TERMINATION): Without reason
                                        ham.0 2021-07-27 12:12:14.794 info (17370) terminating
                                        ham.0 2021-07-27 12:12:14.748 info (17370) cleaned everything up...

                                        M Offline
                                        M Offline
                                        MichaR
                                        schrieb am zuletzt editiert von
                                        #19

                                        Hallo, niemand mit einer Idee die mir helfen kann?

                                        1 Antwort Letzte Antwort
                                        0
                                        • T tazdevil20

                                          Hi,

                                          nach ein paar Schwierigkeiten mit dem Gerät habe ich es halbwegs zufriedenstellend gelöst.
                                          Das nur mal nebenbei: Ich habe den Filter ausgebaut und einen Dichtring ohne Filter eingesetzt. Danach haben meine Sprinkler wieder annähernd das gemacht was sie sollten. Problem ist bei mir, dass der Wasserdruck nicht so hoch ist.

                                          Das zusätzliche Script zu dem Bedienen ist für meine Bedürfnisse fertig. Ist ganz sicher nicht wirklich gut gebaut und ist auch vieles "geklaut", da ich von Websocket keine Ahnung habe.

                                          Es müssen ein paar Parameter manuell im Script gesetzt werden und die Objekte in ioBroker werden auch nicht automatisiert erstellt.

                                          Ich habe nur die Dinge herausgepickt welche für mich interessant sind.

                                          Es darf natürlich jeder das Script verbessern :blush:

                                          EDIT: Habe das Script angepasst um die Historie des Ventils komplett auszulesen und als JSON in ein Objekt zu schreiben.
                                          EDIT2: Da ich gerade dran bin. Kleine Verbesserung des History-JSON (saubere Sortierung wenn mehrfach am Tag eingeschaltet und Laufzeit nicht in Dezimal dargestellt)

                                          /*
                                           * orbit.js
                                           *
                                           * unofficial Orbit Bhyve API module
                                           * Bill Church - https://github.com/billchurch/bhyve-mqtt
                                           *
                                           */
                                          
                                          //todo implement https://github.com/websockets/ws/wiki/client-auto-reconnect-with-ping-listener---exponential-back-off-timeout
                                          
                                          const axios = require('axios')
                                          const EventEmitter = require('events').EventEmitter
                                          const inherits = require('util').inherits
                                          const WebSocket = require('ws')
                                          const Ajv = require('ajv')
                                          let ts = () => new Date().toISOString()
                                          
                                          var mCLIENT_ONLINE = false
                                          var MCLIENT_ONLINE = false
                                          var DevicesJSON, WateringJSON, device_id, feed;
                                          var obj = [];
                                          var objtmp = [];
                                          
                                          // ************************************************************
                                          var man_deviceID = 'Die Device ID des Ventils (zu finden z. B. hier https://techsupport.orbitbhyve.com)'
                                          var man_email = 'Orbit eMail-Adresse hier eintragen!'
                                          var man_password = 'Orbit Passwort hier eintragen'
                                          var wateringJSON_iobroker = 'javascript.0.bHyve.Watering_JSON';
                                          // ************************************************************
                                          
                                          function minTommss(minutes){
                                           var sign = minutes < 0 ? "-" : "";
                                           var min = Math.floor(Math.abs(minutes));
                                           var sec = Math.floor((Math.abs(minutes) * 60) % 60);
                                           return sign + (min < 10 ? "0" : "") + min + ":" + (sec < 10 ? "0" : "") + sec;
                                          }
                                          
                                          function Client () {
                                            if (!(this instanceof Client)) { return new Client() }
                                            EventEmitter.call(this)
                                          
                                            this.config = {
                                              wssURL: undefined,
                                              baseURL: undefined,
                                              timeout: undefined,
                                              email: undefined,
                                              password: undefined,
                                              debug: undefined
                                            }
                                            this._token = undefined
                                            this._user_id = undefined
                                            this._device_id = undefined
                                          }
                                          inherits(Client, EventEmitter)
                                          
                                          // first step, get a token and generate an event on success or fail
                                          Client.prototype.connect = function (cfg) {
                                            this.config.baseURL = cfg.baseURL || 'https://api.orbitbhyve.com'
                                            this.config.timeout = cfg.timeout || 10000
                                            this.config.email = cfg.email || undefined
                                            this.config.password = cfg.password || undefined
                                            this.config.wssURL = cfg.wssURL || 'wss://api.orbitbhyve.com/v1/events'
                                              this.config.wsTimeout = cfg.wsTimeout || 10000
                                            this.config.debug = cfg.debug || true
                                            var self = this
                                          
                                            const getOrbitToken = () => {
                                              return new Promise((resolve, reject) => {
                                                const instance = axios.create({
                                                  baseURL: self.config.baseURL,
                                                  timeout: self.config.timeout
                                                })
                                                instance.post('/v1/session', {
                                                  'session': {
                                                    'email': self.config.email,
                                                    'password': self.config.password
                                                  }
                                                }).then(function (response) {
                                                  self._token = response.data.orbit_session_token
                                                  self._user_id = response.data.user_id
                                                  // config for later sessions
                                                  self._rest_config = { baseURL: self.config.baseURL, timeout: self.config.timeout, headers: { 'orbit-session-token': self._token } }
                                                  //if (self.config.debug) log(`${ts()} - response.data: ` + JSON.stringify(response.data))
                                                  resolve(response)
                                                }).catch(function (err) {
                                                  reject(err)
                                                })
                                              })
                                            }
                                          
                                            const doAccept = (response) => {
                                              //if (self.config.debug) log(`${ts()} - token: ` + self._token + ' My UserID: ' + self._user_id)
                                              self.emit('token', self._token)
                                              self.emit('user_id', self._user_id)
                                            }
                                            const doReject = (err) => {
                                              if (self.config.debug) log(`${ts()} - error ` + err)
                                              self.emit('error', err)
                                            }
                                          
                                            let ost = getOrbitToken()
                                            ost.then(doAccept)
                                              .catch(doReject)
                                          }
                                          
                                          Client.prototype.devices = function () {
                                            var self = this
                                          
                                            const getDevices = () => {
                                              return new Promise((resolve, reject) => {
                                                const instance = axios.create(self._rest_config)
                                                
                                                instance.get('/v1/devices?user_id=' + self._user_id)
                                                  .then(function (response) {
                                                    if (self.config.debug) {
                                                      //log(`${ts()} - response.json: ` + JSON.stringify(response.data))
                                                      DevicesJSON = response.data
                                                    } 
                                                    self._device_id = response.data[0].id
                                                    device_id = response.data[1].id
                                                    
                                                    resolve(response)
                                                  }).catch(function (err) {
                                                    reject(err)
                                                  })
                                          
                                                  instance.get('/v1/watering_events/' + man_deviceID)
                                                  .then(function (response_watering) {
                                                      //log(`${ts()} - response.json - watering_events: ` + JSON.stringify(response.data))
                                                      WateringJSON = response_watering.data
                                          
                                                      for (var i = 0; i < Object.keys(WateringJSON).length; i++) {
                                                          objtmp = [];
                                                          for (var j = 0; j < Object.keys(WateringJSON[i].irrigation).length; j++) {
                                                              let watering_start = formatDate(WateringJSON[i].irrigation[j].start_time, 'DD.MM. hh:mm');
                                                              let watering_runtime =  minTommss(parseFloat(Number(parseFloat(WateringJSON[i].irrigation[j].run_time)).toFixed(2)));
                                                              let watering_liter = parseFloat(Number((WateringJSON[i].irrigation[j].water_volume_gal)*3.78541).toFixed(2));
                                          
                                                              feed = {Start: watering_start, Laufzeit: watering_runtime + " min",Liter: watering_liter}
                                                              if(j==0) {
                                                                  objtmp.push(feed);
                                                              } else {
                                                                  objtmp.unshift(feed);
                                                              }
                                                          };
                                                          obj = obj.concat(objtmp)
                                                      };
                                                      setState(wateringJSON_iobroker, JSON.stringify(obj));
                                                      //resolve(response_watering)
                                                  }).catch(function (err) {
                                                    //reject(err)
                                                  })
                                              })
                                            }
                                          
                                            const doAccept = (response) => {
                                              //if (self.config.debug) console.log(`${ts()} - response.data2: ` + JSON.stringify(response.data))
                                              self.emit('devices', response.data)
                                              self.emit('device_id', self._device_id)
                                            }
                                          
                                            const doReject = (err) => {
                                              if (self.config.debug) log(`${ts()} - error: ` + err)
                                              self.emit('error', err)
                                            }
                                          
                                            let Devices = getDevices()
                                            Devices.then(doAccept)
                                              .catch(doReject)
                                          }
                                          
                                          Client.prototype.send = function (message) {
                                            var self = this
                                          
                                            self._stream.send(JSON.stringify(message))
                                            log('send json: ' + JSON.stringify(message))
                                          }
                                          
                                          Client.prototype.connectStream = function () {
                                            var self = this
                                          
                                            self._stream = new WebSocket(self.config.wssURL, {
                                              handshakeTimeout: self.config.wsTimeout
                                            })
                                          
                                            function sendPing() {
                                              if (self.config.debug) log(`${ts()} - websocket sending ping`)
                                              self._stream.send('{"event":"ping"}')
                                              log("ping")
                                            }
                                          
                                            const authenticate = () => {
                                              let message = {
                                                'event': 'app_connection',
                                                'orbit_session_token': self._token
                                              }
                                          
                                              if (self.config.debug) log(`${ts()} - websocket authenticate message: ` + JSON.stringify(message))
                                          
                                              self._stream.send(JSON.stringify(message))
                                              setInterval(sendPing, 25 * 1000)
                                            }
                                          
                                            self._stream.on('open', authenticate)
                                          
                                            self._stream.on('message', function (data) {
                                              self.emit('message', JSON.parse(data))
                                            })
                                          
                                            self._stream.on('error', function (err) {
                                              self.emit('error', err)
                                            })
                                          
                                            self._stream.on('close', function (num, reason) {
                                              if (self.config.debug) log(`${ts()} - close: ` + num + ' reason: ' + reason)
                                            })
                                          
                                            self._stream.on('ping', function (data) {
                                              if (self.config.debug) log(`${ts()} - ping data: ` + data)
                                            })
                                          
                                            self._stream.on('unexpected-response', function (request, response) {
                                              console.error(`${ts()} - unexpected-response / request: ` + request + ' response: ' + response)
                                            })
                                          }
                                          
                                          //Vorbereitung für Login
                                          var oClient = Client();
                                          
                                          //Login
                                          oClient.connect({
                                              email: man_email,
                                              password: man_password
                                          });
                                          
                                          //get Token
                                          oClient.on('token', (token) => {
                                            //if (MCLIENT_ONLINE) mClient.publish('bhyve/alive', ts(), publishHandler)
                                            //console.log(`${ts()} - Token: ${token}`)
                                          })
                                          
                                          oClient.on('user_id', (userId) => {
                                            //console.log(`${ts()} - user_id: ${userId}`)
                                            oClient.devices()
                                          })
                                          
                                          oClient.on('device_id', (deviceId) => {
                                            //console.log(`${ts()} - device_id: ${deviceId}`)
                                          })
                                          
                                          oClient.on('devices', (data) => {
                                              var objects = JSON.parse(JSON.stringify(DevicesJSON))
                                              objects.forEach(function(key, index){
                                                  //log("Name: " + key.name); 
                                                  //log("Type: " + key.type);
                                                  //log("Firmware-Version: " + key.firmware_version);
                                                  //log("Hardware-Version: " + key.hardware_version);
                                                  if(key.type == "bridge") {
                                                      //log("Last connect: " + key.last_connected_at);
                                                  };
                                                  //log("MAC: " + key.mac_address);
                                                  //log("Connected: " + key.is_connected);
                                                  if(key.type == "sprinkler_timer") {
                                                      //log("Run-Mode: " + key.status.run_mode);
                                                      //log("Battery: " + key.battery.percent);
                                                      setState('javascript.0.bHyve.Battery', key.battery.percent);
                                                  }
                                              });
                                          });
                                          
                                          
                                          HauWi112H Offline
                                          HauWi112H Offline
                                          HauWi112
                                          schrieb am zuletzt editiert von
                                          #20

                                          @tazdevil20
                                          Habe mich ewig mit HAM und den beiden verfügbaren Plugins (platform-orbit und orbit-irrigation) rumgeärgert. Zum Schluss habe ich jede Stunde die HAM-Instanz neu gestartet.

                                          Dann habe ich dein Script probiert... funktioniert exakt, einwandfrei und zuverlässig. Ich brauche jedoch andere Ventil-Infos (z.b. "in use")

                                          Wie/Wo muss ich das Skript anpassen?
                                          Wo ist das key.batttery.percent definiert?

                                          Vielen Dank im Voraus!

                                          T 1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          366

                                          Online

                                          32.5k

                                          Benutzer

                                          81.7k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe