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. Skripten / Logik
  4. Handbetrieb ermitteln

NEWS

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.2k

Handbetrieb ermitteln

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
javascript
5 Beiträge 2 Kommentatoren 234 Aufrufe 1 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.
  • M Online
    M Online
    michihorn
    schrieb am zuletzt editiert von michihorn
    #1

    Hallo ich möchte wissen wann ein State per Fernbedienung und nicht per Script geändert wurde.
    Folgender Ansatz funktioniert wenn ich den DP direkt in den Objekten ändere. Leider klappt es nicht bei einer Änderung per Fernbedienung.

    const js = 'system.adapter.javascript.1'
    const idHand = "0_userdata.0.Garten.Tahoma.Markise.Hand"
    const id_RolloL ="tahoma.0.devices.Markisse_Links.states.core:DeploymentState"
    const id_RolloR ="tahoma.0.devices.Markisse_Rechts.states.core:DeploymentState"
    var text
    
    const auslöser =[id_RolloL, id_RolloR]
    
    on({ id: auslöser, change: 'any', fromNe: js, ack: false }, function (dp) {
    
        log("Handbetrieb: " + dp.state.val)
        setState(idHand, true)
        text = '\u261d\ufe0f Markiese ist per Hand gefahren worden'
        if (logging) sendTo('whatsapp-cmb.0', 'send', { text, phone: '+4915253938xxx' });
    });
    
    on({ time: { hour: 23, minute: 59 } }, function () {
        setState(idHand, false);
    });
    

    Zu erwähnen wäre noch, ich habe zwei Javainstancen, [0,1]
    Gruß Michael

    Edit: Habs mal mit folgenden Satz probiert:

    on({ id: auslöser, change: 'any', fromNe: js, ack: **true** }, function (dp) {
    

    zumindest reagiert das Script nun auf die Fernbedienung, mal schauen was später bei Scriptausführung passiert.

    paul53P 1 Antwort Letzte Antwort
    0
    • M michihorn

      Hallo ich möchte wissen wann ein State per Fernbedienung und nicht per Script geändert wurde.
      Folgender Ansatz funktioniert wenn ich den DP direkt in den Objekten ändere. Leider klappt es nicht bei einer Änderung per Fernbedienung.

      const js = 'system.adapter.javascript.1'
      const idHand = "0_userdata.0.Garten.Tahoma.Markise.Hand"
      const id_RolloL ="tahoma.0.devices.Markisse_Links.states.core:DeploymentState"
      const id_RolloR ="tahoma.0.devices.Markisse_Rechts.states.core:DeploymentState"
      var text
      
      const auslöser =[id_RolloL, id_RolloR]
      
      on({ id: auslöser, change: 'any', fromNe: js, ack: false }, function (dp) {
      
          log("Handbetrieb: " + dp.state.val)
          setState(idHand, true)
          text = '\u261d\ufe0f Markiese ist per Hand gefahren worden'
          if (logging) sendTo('whatsapp-cmb.0', 'send', { text, phone: '+4915253938xxx' });
      });
      
      on({ time: { hour: 23, minute: 59 } }, function () {
          setState(idHand, false);
      });
      

      Zu erwähnen wäre noch, ich habe zwei Javainstancen, [0,1]
      Gruß Michael

      Edit: Habs mal mit folgenden Satz probiert:

      on({ id: auslöser, change: 'any', fromNe: js, ack: **true** }, function (dp) {
      

      zumindest reagiert das Script nun auf die Fernbedienung, mal schauen was später bei Scriptausführung passiert.

      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von
      #2

      @michihorn
      Lass ack im Trigger weg. Bei Änderung per Fernbedienung ist ack true.

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      M 1 Antwort Letzte Antwort
      1
      • paul53P paul53

        @michihorn
        Lass ack im Trigger weg. Bei Änderung per Fernbedienung ist ack true.

        M Online
        M Online
        michihorn
        schrieb am zuletzt editiert von michihorn
        #3

        @paul53 Leider wird der DP "Hand" auch bei der Scriptausführung gesetzt. Das Script zur Überprüfung sieht nun so aus:

        var logging = true;
        const js = 'system.adapter.javascript.1'
        const idHand = "0_userdata.0.Garten.Tahoma.Markise.Hand"
        const id_RolloL ="tahoma.0.devices.Markisse_Links.states.core:TargetClosureState"
        const id_RolloR ="tahoma.0.devices.Markisse_Rechts.states.core:TargetClosureState"
        
        var text
        
        const auslöser =[id_RolloL, id_RolloR]
        on({ id: auslöser, change: 'ne', fromNe: js }, function (dp) {
            log("Handbetrieb: " + dp.state.val)
            setState(idHand, true)
            text = '\u261d\ufe0f Markiese ist per Hand gefahren worden'
            if (logging) sendTo('whatsapp-cmb.0', 'send', { text, phone: '+491525393xxxx' });
        });
        
        on({ time: { hour: 23, minute: 59 } }, function () {
            setState(idHand, false);
        });
        
        paul53P 1 Antwort Letzte Antwort
        0
        • M michihorn

          @paul53 Leider wird der DP "Hand" auch bei der Scriptausführung gesetzt. Das Script zur Überprüfung sieht nun so aus:

          var logging = true;
          const js = 'system.adapter.javascript.1'
          const idHand = "0_userdata.0.Garten.Tahoma.Markise.Hand"
          const id_RolloL ="tahoma.0.devices.Markisse_Links.states.core:TargetClosureState"
          const id_RolloR ="tahoma.0.devices.Markisse_Rechts.states.core:TargetClosureState"
          
          var text
          
          const auslöser =[id_RolloL, id_RolloR]
          on({ id: auslöser, change: 'ne', fromNe: js }, function (dp) {
              log("Handbetrieb: " + dp.state.val)
              setState(idHand, true)
              text = '\u261d\ufe0f Markiese ist per Hand gefahren worden'
              if (logging) sendTo('whatsapp-cmb.0', 'send', { text, phone: '+491525393xxxx' });
          });
          
          on({ time: { hour: 23, minute: 59 } }, function () {
              setState(idHand, false);
          });
          
          paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von paul53
          #4

          @michihorn sagte: Leider wird der DP "Hand" auch bei der Scriptausführung gesetzt.

          Das ist bei Rollos ein Problem: Es werden auch Zwischenpositionen gesendet. Das muss man mit einem Timeout überbrücken.

          var logging = true;
          const js = 'system.adapter.javascript.';
          const idHand = "0_userdata.0.Garten.Tahoma.Markise.Hand";
          const id_RolloL ="tahoma.0.devices.Markisse_Links.states.core:TargetClosureState";
          const id_RolloR ="tahoma.0.devices.Markisse_Rechts.states.core:TargetClosureState";
           
          var timer = null;
           
          on([id_RolloL, id_RolloR], function (dp) {
              if(!timer) {
                  let manuell = true;
                  if(dp.state.from.startsWith(js)) {
                      manuell = false;
                      timer = setTimeout(function() {
                          timer = null;
                      }, 20000); // max. Rollolaufzeit
                  }
                  log("Handbetrieb: " + manuell);
                  setState(idHand, manuell, true);
                  if(manuell) {
                      let text = '\u261d\ufe0f Markiese ist per Hand gefahren worden'
                      if (logging) sendTo('whatsapp-cmb.0', 'send', { text, phone: '+491525393xxxx' });
                  }
              }
          });
          

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          M 1 Antwort Letzte Antwort
          0
          • paul53P paul53

            @michihorn sagte: Leider wird der DP "Hand" auch bei der Scriptausführung gesetzt.

            Das ist bei Rollos ein Problem: Es werden auch Zwischenpositionen gesendet. Das muss man mit einem Timeout überbrücken.

            var logging = true;
            const js = 'system.adapter.javascript.';
            const idHand = "0_userdata.0.Garten.Tahoma.Markise.Hand";
            const id_RolloL ="tahoma.0.devices.Markisse_Links.states.core:TargetClosureState";
            const id_RolloR ="tahoma.0.devices.Markisse_Rechts.states.core:TargetClosureState";
             
            var timer = null;
             
            on([id_RolloL, id_RolloR], function (dp) {
                if(!timer) {
                    let manuell = true;
                    if(dp.state.from.startsWith(js)) {
                        manuell = false;
                        timer = setTimeout(function() {
                            timer = null;
                        }, 20000); // max. Rollolaufzeit
                    }
                    log("Handbetrieb: " + manuell);
                    setState(idHand, manuell, true);
                    if(manuell) {
                        let text = '\u261d\ufe0f Markiese ist per Hand gefahren worden'
                        if (logging) sendTo('whatsapp-cmb.0', 'send', { text, phone: '+491525393xxxx' });
                    }
                }
            });
            
            M Online
            M Online
            michihorn
            schrieb am zuletzt editiert von michihorn
            #5

            @paul53 sagte in Handbetrieb ermitteln:

            Okay ich test mal, hatte genau aus diesem Grund auch schon den State "tahoma.0.devices.Markisse_Rechts.states.core:TargetClosureState" [der hat nur 0 oder 100 als Wert], ausgewählt und nicht wie im ersten Script den "tahoma.0.devices.Markisse_Links.states.core:DeploymentState", bei dem es diese Zwischwerte gibt.

            Edit: Anbei mein Script, es tut was es soll:

            var logging = true;
            const js = 'system.adapter.javascript.'
            const idHand = "0_userdata.0.Garten.Tahoma.Markise.Hand"
            const id_RolloL = "tahoma.0.devices.Markisse_Links.states.core:TargetClosureState"
            const id_RolloR = "tahoma.0.devices.Markisse_Rechts.states.core:TargetClosureState"
            var text
            
            //const auslöser =[id_RolloL, id_RolloR]
            const auslöser = [id_RolloR]
            on({ id: auslöser, val: 0, fromNe: js }, function (dp) {
                log("Handbetrieb: " + dp.state.val, "info")
                setState(idHand, true)
                var text = '\u270b  Markiese von Hand eingefahren'
                sendTo('whatsapp-cmb.0', 'send', { text, phone: '+49152539xxxxx' });
            });
            
            on({ time: { hour: 23, minute: 59 } }, function () {
                setState(idHand, false);
            });
            

            Zur Erklärung, ich werte aktuell nur den DP in Zeile 5 aus, der DP hat im Zustand Markiese Eingefahren den Wert "0" ansonsten "100"
            Der DP Hand "True" dient quasi als Verriegelung gegen nochmaliges automatischen Ausfahren der Markiese.

            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

            910

            Online

            32.4k

            Benutzer

            81.5k

            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