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. Script zum umschalten der Werte

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    2.1k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    930

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

Script zum umschalten der Werte

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
18 Beiträge 5 Kommentatoren 2.9k Aufrufe
  • Ä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.
  • paul53P Offline
    paul53P Offline
    paul53
    schrieb am zuletzt editiert von
    #7

    @Marcolotti:

    Cannot read property 'val' of null at Object. `
    Entweder stimmt die ID nicht oder es ist kein State-Object.

    Kopiere mal die Eigenschaften der 3 Objekte (raw-Tab) in den nächsten Beitrag (als Code oder Screen shot), z.B. so:
    493_objekt_raw.jpg

    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

    1 Antwort Letzte Antwort
    0
    • M Offline
      M Offline
      Marcolotti
      schrieb am zuletzt editiert von
      #8

      Nr.1:````
      {
      "common": {
      "name": "",
      "type": "number",
      "role": "value",
      "unit": "",
      "def": 0,
      "read": true,
      "write": false,
      "history": {
      "history.0": {
      "enabled": true,
      "changesOnly": true,
      "debounce": 10000,
      "maxLength": 960,
      "retention": 31536000
      }
      }
      },
      "native": {
      "regType": "inputRegs",
      "type": "int32be",
      "address": 30865,
      "len": 2,
      "offset": 0,
      "factor": 1
      },
      "acl": {
      "object": 1638,
      "owner": "system.user.admin",
      "ownerGroup": "system.group.administrator",
      "state": 1638
      },
      "_id": "modbus.0.inputRegisters.30865_Bezug",
      "type": "state"
      }

      
      Nr.2````
      {
        "type": "state",
        "common": {
          "name": "",
          "type": "number",
          "read": true,
          "write": false,
          "def": 0,
          "role": "value",
          "unit": "",
          "history": {
            "history.0": {
              "enabled": true,
              "changesOnly": true,
              "debounce": 10000,
              "maxLength": 960,
              "retention": 31536000
            }
          }
        },
        "native": {
          "regType": "inputRegs",
          "address": 30867,
          "type": "int32be",
          "len": 2,
          "offset": 1,
          "factor": 1
        },
        "_id": "modbus.0.inputRegisters.30867_Einspeisung",
        "acl": {
          "object": 1638,
          "state": 1638
        }
      }
      

      Nr.3````
      {
      "type": "state",
      "common": {
      "name": "",
      "type": "number",
      "read": true,
      "write": false,
      "def": 0,
      "role": "value",
      "unit": "",
      "history": {
      "history.0": {
      "enabled": true,
      "changesOnly": true,
      "debounce": 10000,
      "maxLength": 960,
      "retention": 31536000
      }
      }
      },
      "native": {
      "regType": "inputRegs",
      "address": 30775,
      "type": "int32be",
      "len": 2,
      "offset": 0,
      "factor": 1
      },
      "_id": "modbus.0.inputRegisters.30775_PVLeistung",
      "acl": {
      "object": 1638,
      "state": 1638
      }
      }

      
      Ist das so okay?

      CCU2-CuxD&Cul868MHz, 44xHM Geräte, 20xMAX Fenstersensoren.Acer Revo mit IoBroker, Tablet Captiva 9,7 SFHD. SMA SB2.5,STP7000TL20,SMA Energy Meter, Echo, Harmony, JeeLink868, Arduino 433MHz, MaxtoxCUL868,MilightEasyLED,Hue

      1 Antwort Letzte Antwort
      0
      • paul53P Offline
        paul53P Offline
        paul53
        schrieb am zuletzt editiert von
        #9

        Die Objekte sehen klar nach State-Objekten aus und die IDs stimmen offenbar auch.

        Sind bei allen 3 Objekten Werte im Reiter "Objekte" oder "Zustände" zu sehen ?

        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

        1 Antwort Letzte Antwort
        0
        • M Offline
          M Offline
          Marcolotti
          schrieb am zuletzt editiert von
          #10

          Ja, die Werte sind da. Jedoch wenn die PV-Anlage nichts ins Netz speist, dann ist der Wert auf 0. Logisch. ;-) Beim Wert null kommt der Fehler. Das müsste man abfangen.

          CCU2-CuxD&Cul868MHz, 44xHM Geräte, 20xMAX Fenstersensoren.Acer Revo mit IoBroker, Tablet Captiva 9,7 SFHD. SMA SB2.5,STP7000TL20,SMA Energy Meter, Echo, Harmony, JeeLink868, Arduino 433MHz, MaxtoxCUL868,MilightEasyLED,Hue

          1 Antwort Letzte Antwort
          0
          • paul53P Offline
            paul53P Offline
            paul53
            schrieb am zuletzt editiert von
            #11

            null und 0 ist nicht das Gleiche. Der Wert 0 dürfte keine Probleme machen. Nur wie kommt dort null hinein ? Das sollte verhindert werden.

            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

            1 Antwort Letzte Antwort
            0
            • paul53P Offline
              paul53P Offline
              paul53
              schrieb am zuletzt editiert von
              #12

              Anmerkung zu Deinem Zähler:

              setState("javascript.0.Displayzaehler", getState("javascript.0.Displayzaehler").val + 1);
              

              sorgt dafür, dass "Displayzaeher" erst einmal auf 3 springt, bevor er kurz danach auf 0 zurück gesetzt wird. Besser:

              schedule("*/1 * * * *",  function () { // jede Minute
              var cnt = getState("javascript.0.Displayzaehler").val + 1;
              if (cnt > 2) cnt = 0;
              setState("javascript.0.Displayzaehler", cnt);
              
              if (cnt === 0) setState("javascript.0.Displayanzeige", "Netzbezug");
              
              else if (cnt  == 1) setState("javascript.0.Displayanzeige", "PVLeistung");
              
              else setState("javascript.0.Displayanzeige", "Einspeisung");   
              
              }); // end of schedule
              

              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

              1 Antwort Letzte Antwort
              0
              • P Offline
                P Offline
                pix
                schrieb am zuletzt editiert von
                #13

                Hallo,

                auch wenn ich hier jetzt komplett Verwirrung stifte :lol:

                Jetzt habe ich auch kapiert, dass es sich um eine Anzeige handelt, die jede Minute entweder den Bezug, die PVLeistung oder die Einspeisung abwechselnd darstellt. Und das jeweils für eine Minute.

                Wenn nicht noch an anderer Stelle (zB mit VIS Widget State val) die Displayanzeige geändert werden soll, dann würde ich die "rollenartige" Anzeige anders angehen. Nämlich mit einem Interval. Ich lasse so in einem Widget verschiedene Webcams und Grafiken alle zehn Sekunden alternierend anzeigen:

                ! var idBezug = 'modbus.0.inputRegisters.30865_Bezug'; var idPVLeistung = 'modbus.0.inputRegisters.30775_PVLeistung'; var idEinspeisung = 'modbus.0.inputRegisters.30867_Einspeisung'; ! var idZaehler = 'javascript.0.Displayzaehler', idAnzeige = 'javascript.0.Displayanzeige', idInhalt = 'javascript.0.Displayinhalt'; ! var x = 0; // Zähler ! setInterval(function () { if (x === 0) { setState(idAnzeige, 'Netzbezug'); setState(idInhalt, getState(idBezug).val); } else if (x==1) { setState(idAnzeige, 'PVLeistung'); setState(idInhalt, getState(idPVLeistung).val); } else if (x==2) { setState(idAnzeige, 'Einspeisung'); setState(idInhalt, getState(idEinspeisung).val); } log('Displayinhalt: ' + getState(idInhalt).val); x++; // hochzählen if (x == 3) x = 0; // Reset }, 60 * 1000); // jede Minute ! // Modbus inputRegisters überwachen on( { id: /\.inputRegisters.*$/ }, function(obj) { if (!obj.state.val) { // wenn kein Wert da // Welcher der drei Werte ist hier gemeint? var nameDatenpunkt = (obj.id).split('_'); // zB javascript.0.Alarm.Schlafzimmer.Luftfeuchte.Grenzwert nameDatenpunkt = nameDatenpunkt[nameDatenpunkt.length]; // letzter Teil nach dem Unterstrich (also Bezug,PVLeistung oder Einspeisung) var nameVariable = 'id' + nameDatenpunkt; setState(nameVariable, 0); // Wert auf '0' statt 'null' } }); !
                Unten ist noch eine Funktion eingebaut, die die drei Modbus-Datenpunkt überwacht. Man kann natürlich für jeden dieser drei Datenpunkte eine eigene Funktion schreiben````
                on( idBezug, function(obj) {
                if (!obj.state.val) setState(idBezug, 0); // Wert auf '0' statt 'null'
                });
                on( idPVLeistung, function(obj) {
                if (!obj.state.val) setState(idPVLeistung, 0);
                });
                on( idEinspeisung, function(obj) {
                if (!obj.state.val) setState(idEinspeisung, 0);
                });

                
                Achtung: __idPV__ muste in __idPVLeistung__ (analog zur Modbus-Datenpunkt-Bennung umbenannt werden).
                
                Probier das mal (hab es noch nicht getestet).
                
                Gruß
                
                Pix

                ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                1 Antwort Letzte Antwort
                0
                • BluefoxB Offline
                  BluefoxB Offline
                  Bluefox
                  schrieb am zuletzt editiert von
                  #14

                  Man muss 3 Werte anzeigen mit 3 Widgets und deren Visibility über setInterval steuern.

                  Vorteil: auch wenn während das Wert angezeigt wird, das Wert sich ändert, das wird auch angezeigt.

                  Bei deiner Lösung das Wert wird statisch sein und nur beim nächsten Anzeigen wird upgedated.

                  1 Antwort Letzte Antwort
                  0
                  • P Offline
                    P Offline
                    pix
                    schrieb am zuletzt editiert von
                    #15

                    Hallo,
                    @Bluefox:

                    Man muss 3 Werte anzeigen mit 3 Widgets und deren Visibility über setInterval steuern.

                    Vorteil: auch wenn während das Wert angezeigt wird, das Wert sich ändert, das wird auch angezeigt.

                    Bei deiner Lösung das Wert wird statisch sein und nur beim nächsten Anzeigen wird upgedated. `
                    das ist völlig richtig. Danke für den Hinweis.

                    Also einfach den Interval laufen lassen und eine Variable für die Anzeige verwenden

                    ! var idBezug = 'modbus.0.inputRegisters.30865_Bezug'; var idPVLeistung = 'modbus.0.inputRegisters.30775_PVLeistung'; var idEinspeisung = 'modbus.0.inputRegisters.30867_Einspeisung'; ! var idZaehler = 'javascript.0.Displayzaehler'; var x = 0; // Zähler für Interval ! setInterval(function () { setState(idZaehler, x); log('Displayzaehler: ' + getState(idZaehler).val); x++; // hochzählen if (x == 3) x = 0; // Reset }, 60 * 1000); // jede Minute !
                    unten dran wieder entweder Regexp

                    // Modbus inputRegisters überwachen
                    on( {
                        id: /\.inputRegisters.*$/
                    }, function(obj) {
                        if (!obj.state.val) { // wenn kein Wert da
                            // Welcher der drei Werte ist hier gemeint?
                            var nameDatenpunkt = (obj.id).split('_'); // zB modbus.0.inputRegisters.30865_Bezug
                            nameDatenpunkt = nameDatenpunkt[nameDatenpunkt.length]; // letzter Teil nach dem Unterstrich (also Bezug,PVLeistung oder Einspeisung)
                            var nameVariable = 'id' + nameDatenpunkt;
                            setState(nameVariable, 0);    // Wert auf '0' statt 'null'
                        }
                    });
                    

                    oder einfach

                    on( idBezug, function(obj) {
                        if (!obj.state.val) setState(idBezug, 0);    // Wert auf '0' statt 'null'
                    });
                    on( idPVLeistung, function(obj) {
                        if (!obj.state.val) setState(idPVLeistung, 0);
                    });
                    on( idEinspeisung, function(obj) {
                        if (!obj.state.val) setState(idEinspeisung, 0);
                    });
                    >! ````Das funktioniert natürlich nur, wenn du aus Javascript die Datenpunkte des modbus-Adapters beschreiben kannst. Wenn nicht, brauchst du noch jeweils eine neue Variable in Javascript, die die modbus-Werte (ggf. korrigiert) einliest und die du später in VIS verwenden kannst.
                    Dann drei Widgets deckungsgleich übereinander legen und in die Sichtbarkeit den gewünschten Wert von x eintragen.
                    
                    Beim Widget __Bezug__ in OID die ID des (ggf. korrigierten) modbus-Datenpunktseintragen, in Sichtbarkeit die ID __javascript.0.Displayzaehler__ und als Wert die ==0.
                    
                    Beim Widget __PVLeistung__ den entsprechenden Datenpunkt, in Sichtbarkeit wieder die ID __javascript.0.Displayzaehler__ und als Wert die ==1.
                    
                    Beim Widget __Einspeisung__ schließlich den richtigen Datenpunkt, in Sichtbarkeit die ID __javascript.0.Displayzaehler__ und als Wert die ==2.
                    
                    Zwei der drei Widgets werden jetzt im Minutentakt für eine Minute ausgeblendet, es bleibt ein Widget mit stets aktuellen Daten.
                    
                    Gruß,
                    
                    Pix

                    ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                    1 Antwort Letzte Antwort
                    0
                    • M Offline
                      M Offline
                      Marcolotti
                      schrieb am zuletzt editiert von
                      #16

                      Guten Morgen,

                      vielen Dank für eure Antworten.

                      Ich habe das jetzt mit dem Interval und den 3 deckungsgleichen Anzeigen gemacht. Das funktioniert soweit ganz gut ABER…

                      Wenn ich die 3 Widgets übereinander lege, dann sind prinzipiell immer 2 davon klein bei der Anzeige. Ich habe es über Widgets-Exportieren und Importieren gemacht, alle Werte verglichen, alle 3 zusammen markiert und nochmals die Werte (Größenangaben) neu geschrieben. Trotzdem sind immer 2 davon in klein, das letzte ist groß.

                      721_pv.jpg
                      721_einspeisung.jpg
                      721_bezug.jpg

                      VIS Edit
                      721_vis.jpg

                      Vielen Dank und viele Grüße

                      Marco

                      CCU2-CuxD&Cul868MHz, 44xHM Geräte, 20xMAX Fenstersensoren.Acer Revo mit IoBroker, Tablet Captiva 9,7 SFHD. SMA SB2.5,STP7000TL20,SMA Energy Meter, Echo, Harmony, JeeLink868, Arduino 433MHz, MaxtoxCUL868,MilightEasyLED,Hue

                      1 Antwort Letzte Antwort
                      0
                      • BluefoxB Offline
                        BluefoxB Offline
                        Bluefox
                        schrieb am zuletzt editiert von
                        #17

                        @Marcolotti:

                        Guten Morgen,

                        vielen Dank für eure Antworten.

                        Ich habe das jetzt mit dem Interval und den 3 deckungsgleichen Anzeigen gemacht. Das funktioniert soweit ganz gut ABER…

                        Wenn ich die 3 Widgets übereinander lege, dann sind prinzipiell immer 2 davon klein bei der Anzeige. Ich habe es über Widgets-Exportieren und Importieren gemacht, alle Werte verglichen, alle 3 zusammen markiert und nochmals die Werte (Größenangaben) neu geschrieben. Trotzdem sind immer 2 davon in klein, das letzte ist groß.

                        filename="PV.JPG" index="1">~~
                        filename="Einspeisung.JPG" index="2">~~
                        filename="bezug.JPG" index="3">~~

                        VIS Edit
                        filename="vis.JPG" index="0">~~

                        Vielen Dank und viele Grüße

                        Marco `
                        Kannst du mal die 3 exportieren hier?

                        1 Antwort Letzte Antwort
                        0
                        • M Offline
                          M Offline
                          Marcolotti
                          schrieb am zuletzt editiert von
                          #18
                          [{"tpl":"tplSegmentClock","data":{"oid":"modbus.0.inputRegisters.30865_Bezug","visibility-cond":"==","visibility-val":"1","clock":false,"seconds":false,"pattern":"#####","colorOn":"#fd1717","colorOff":"rgba(0, 0, 0, 0.1)","runStepInterval":"0","segmentCount":"7","displayAngle":"9","digitHeight":"25","digitWidth":"20","digitDistance":"2","segmentWidth":"2","segmentDistance":"0.5","cornerType":"PointedCorner","gestures-offsetX":"0","gestures-offsetY":0,"gestures-swiping-value":"","gestures-rotating-value":"","gestures-pinching-value":"","gestures-swipeRight-value":"","gestures-swipeLeft-value":"","gestures-swipeUp-value":"","gestures-swipeDown-value":"","gestures-rotateLeft-value":"","gestures-rotateRight-value":"","gestures-pinchIn-value":"","gestures-pinchOut-value":"","text":"","locked":false,"visibility-oid":"javascript.0.Displayzaehler"},"style":{"left":"796px","top":"6px","width":"334px","height":"92px","text-align":"","color":"#fd0808"},"widgetSet":"timeandweather"},{"tpl":"tplSegmentClock","data":{"oid":"modbus.0.inputRegisters.30775_PVLeistung","visibility-cond":"==","visibility-val":"2","clock":false,"seconds":false,"pattern":"#####","colorOn":"#fd1717","colorOff":"rgba(0, 0, 0, 0.1)","runStepInterval":"0","segmentCount":"7","displayAngle":"9","digitHeight":"25","digitWidth":"20","digitDistance":"2","segmentWidth":"2","segmentDistance":"0.5","cornerType":"PointedCorner","gestures-offsetX":"0","gestures-offsetY":0,"gestures-swiping-value":"","gestures-rotating-value":"","gestures-pinching-value":"","gestures-swipeRight-value":"","gestures-swipeLeft-value":"","gestures-swipeUp-value":"","gestures-swipeDown-value":"","gestures-rotateLeft-value":"","gestures-rotateRight-value":"","gestures-pinchIn-value":"","gestures-pinchOut-value":"","text":"","locked":false,"visibility-oid":"javascript.0.Displayzaehler"},"style":{"left":"796px","top":"7px","width":"334px","height":"92px","text-align":"","color":"#fd0808","font-style":"normal"},"widgetSet":"timeandweather"},{"tpl":"tplSegmentClock","data":{"oid":"modbus.0.inputRegisters.30867_Einspeisung","visibility-cond":"==","visibility-val":"3","clock":false,"seconds":false,"pattern":"#####","colorOn":"#fd1717","colorOff":"rgba(0, 0, 0, 0.1)","runStepInterval":"0","segmentCount":"7","displayAngle":"9","digitHeight":"25","digitWidth":"20","digitDistance":"2","segmentWidth":"2","segmentDistance":"0.5","cornerType":"PointedCorner","gestures-offsetX":"0","gestures-offsetY":0,"gestures-swiping-value":"","gestures-rotating-value":"","gestures-pinching-value":"","gestures-swipeRight-value":"","gestures-swipeLeft-value":"","gestures-swipeUp-value":"","gestures-swipeDown-value":"","gestures-rotateLeft-value":"","gestures-rotateRight-value":"","gestures-pinchIn-value":"","gestures-pinchOut-value":"","text":"","locked":false,"visibility-oid":"javascript.0.Displayzaehler"},"style":{"left":"798px","top":"7px","width":"334px","height":"92px","text-align":"","color":"#fd0808"},"widgetSet":"timeandweather"}]
                          

                          CCU2-CuxD&Cul868MHz, 44xHM Geräte, 20xMAX Fenstersensoren.Acer Revo mit IoBroker, Tablet Captiva 9,7 SFHD. SMA SB2.5,STP7000TL20,SMA Energy Meter, Echo, Harmony, JeeLink868, Arduino 433MHz, MaxtoxCUL868,MilightEasyLED,Hue

                          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

                          741

                          Online

                          32.6k

                          Benutzer

                          82.2k

                          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