Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Please move the states to 0_userdata.0.*

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Please move the states to 0_userdata.0.*

    This topic has been deleted. Only users with topic management privileges can see it.
    • P
      peschu last edited by

      Hallo,

      ich bekomme auch die Meldung:
      script.js.Scripte.Akku_LG: Own states (javascript.0.scriptEnabled.Scripte.Akku-Ladesteuerung) should not be used in javascript.X.scriptEnabled.! Please move the states to 0_userdata.0.

      So sieht mein Objektbaum aus:

      60999b8b-b473-46df-a519-e7684cf84cdc-image.png

      Jetzt die Anfängerfragen:
      Wie bekomme ich den Status zu Userdata usw. Mir geht es nur darum das Script ein- bzw. auszuschalten.

      Schon mal Danke

      Peschu21

      apollon77 1 Reply Last reply Reply Quote 0
      • apollon77
        apollon77 @peschu last edited by

        @peschu Dann ist aber hier was komisch. Dein Skript Scripte.Akku_LG scheint einen State dort anlegen zu wollen ... das darf es nicht. Zeig doch mal das Skript

        P 1 Reply Last reply Reply Quote 0
        • P
          peschu @apollon77 last edited by

          @apollon77

          Da ist der Ausschnitt:

          9408bfd9-9feb-4a3f-bede-6ebac3292c84-image.png

          oder muss ich da aktualisiere nehmen?

          apollon77 Homoran 2 Replies Last reply Reply Quote 0
          • apollon77
            apollon77 @peschu last edited by

            @peschu Das kanns aber jicht sein weil die meldung nur kommt wenn du states anlegst! (createState) ... keine ahnung was blockyly da tut

            Homoran 1 Reply Last reply Reply Quote 0
            • Homoran
              Homoran Global Moderator Administrators @peschu last edited by

              @peschu sagte in Please move the states to 0_userdata.0.*:

              Da ist der Ausschnitt:

              Ausschnitte helfen selten!

              wie kommt der Datenpunkt in das Verzeichnis?

              1 Reply Last reply Reply Quote 0
              • Homoran
                Homoran Global Moderator Administrators @apollon77 last edited by

                @apollon77 sagte in Please move the states to 0_userdata.0.*:

                weil die meldung nur kommt wenn du states anlegst! (

                sicher?
                nicht auch wenn ein DP in dem Verzeichnis angesprochen wird?

                @peschu hat sich erledigt. Dein Skript heisst so?

                P 1 Reply Last reply Reply Quote 0
                • P
                  peschu @Homoran last edited by

                  @homoran
                  Jetzt stehe ich auf dem Schlauch. der Datenpunkt dürfte vom Script kommen, weil das so heißt und sich auch in dem entsprechenden Ordner befindet.

                  Das ist das gesamte Script:

                  100eeabe-4fbb-4a0a-8348-a03aff4d5196-image.png

                  R 1 Reply Last reply Reply Quote 0
                  • R
                    RaBu60 @peschu last edited by RaBu60

                    Ich habe auch dieses Problem 🙁

                    Hier die Struktur unter Javascript:
                    Screenshot 2023-06-24 141914.png

                    Wenn ich nun folgendes JS starte (ist wirklich nur ein Einzeiler)

                    setState("javascript.0.scriptEnabled.Hydrawise.Hydrawise", false, true);
                    

                    erhalte ich
                    Screenshot 2023-06-24 142210 a.png

                    Den Datenpunkt unter javascript.0... habe ich nicht selbst angelegt.

                    Wie kann ich diesen Log-Eintrag unterdrücken?
                    Die Version des JS-Adapters ist 7.0.3

                    Thomas Braun apollon77 2 Replies Last reply Reply Quote 0
                    • Thomas Braun
                      Thomas Braun Most Active @RaBu60 last edited by

                      @rabu60 sagte in Please move the states to 0_userdata.0.*:

                      Wie kann ich diesen Log-Eintrag unterdrücken?

                      Du willst das nicht unterdrücken sondern die Ursache beseitigen. Kann sonst ggfs . in künftigen Versionen zu einem Fehler führen.

                      R 1 Reply Last reply Reply Quote 0
                      • R
                        RaBu60 @Thomas Braun last edited by

                        @thomas-braun sagte in Please move the states to 0_userdata.0.*:

                        Du willst das nicht unterdrücken sondern die Ursache beseitigen. Kann sonst ggfs . in künftigen Versionen zu einem Fehler führen.

                        Klar, unterdrücken wäre wirklich suboptimal 😉

                        Aber es sollte doch möglich sein, diesen Datenpunkt per Script zu ändern ohne diesen Log-Eintrag zu erhalten
                        Mache ich irgendetwas falsch?

                        Thomas Braun 1 Reply Last reply Reply Quote 0
                        • Thomas Braun
                          Thomas Braun Most Active @RaBu60 last edited by

                          @rabu60 sagte in Please move the states to 0_userdata.0.*:

                          Aber es sollte doch möglich sein, diesen Datenpunkt per Script zu ändern

                          Wenn es im dafür vorgesehenen Verzeichnis passiert erscheint auch keine Meldung.

                          R 1 Reply Last reply Reply Quote 0
                          • R
                            RaBu60 @Thomas Braun last edited by

                            @thomas-braun sagte in Please move the states to 0_userdata.0.*:

                            @rabu60 sagte in Please move the states to 0_userdata.0.*:

                            Aber es sollte doch möglich sein, diesen Datenpunkt per Script zu ändern

                            Wenn es im dafür vorgesehenen Verzeichnis passiert erscheint auch keine Meldung.

                            Nun, ich möchte per Script ein anderes Script (in diesem Falle "Hydrawise") stoppen
                            und ggfs. wieder starten.

                            Welcher DP bzw. Verzeichnis wäre das Richtige?

                            DJMarc75 T 2 Replies Last reply Reply Quote 0
                            • DJMarc75
                              DJMarc75 @RaBu60 last edited by

                              @rabu60 sagte in Please move the states to 0_userdata.0.*:

                              Nun, ich möchte per Script ein anderes Script (in diesem Falle "Hydrawise") stoppen
                              und ggfs. wieder starten.

                              Warum will man sowas machen ?

                              Hat wenig Sinn.

                              R 1 Reply Last reply Reply Quote 0
                              • R
                                RaBu60 @DJMarc75 last edited by RaBu60

                                @djmarc75
                                Nun, ich habe das Script 1, welches über schedule regelmäßig Abfragen über den Status meiner Beregnungsanlage abfrägt.
                                Ich habe Datenpunkte unter 0_userdata.* angelegt, die die Settings (z.B. Request-URL,
                                Abfrageintervall etc.) beinhalten.
                                Wenn ich nun Settings ändere, und da ist z.B. das Abfrageintervall welches die schedule-Zeiten betreffen, möchte ich das Script nicht manuell stoppen und wieder starten müssen.
                                Das soll z.B. Script 2 , welches weitere DPs "überwacht" für mich erledigen.

                                Ich hoffe ich konnte das etwas verständlich rüberbringen 😊

                                DJMarc75 1 Reply Last reply Reply Quote 0
                                • DJMarc75
                                  DJMarc75 @RaBu60 last edited by

                                  @rabu60 sagte in Please move the states to 0_userdata.0.*:

                                  Ich hoffe ich konnte das etwas verständlich rüberbringen

                                  für mich nicht... und ist das Skript geheim ? Wir sind hier keine Hellseher.

                                  R 1 Reply Last reply Reply Quote 0
                                  • R
                                    RaBu60 @DJMarc75 last edited by

                                    @djmarc75 sagte in Please move the states to 0_userdata.0.*:

                                    @rabu60 sagte in Please move the states to 0_userdata.0.*:

                                    Ich hoffe ich konnte das etwas verständlich rüberbringen

                                    für mich nicht... und ist das Skript geheim ? Wir sind hier keine Hellseher.

                                    Natürlich ist das Script nicht geheim...

                                    Hier der Code, der die regelmäßige Abfrage macht (Scripname Hydrawise):

                                    var source_dp = '0_userdata.0.Hydrawise';
                                    var dpSettings = source_dp+".Settings";
                                    var dpAPI_Key = dpSettings+".API_Key";
                                    var dpInterval = dpSettings+".interval";
                                    
                                    var debugNoLog = 'nolog';
                                    var debugInfo = 'info';
                                    var debugWarn = 'warn';
                                    var debugError = 'error';
                                    var debugMode = debugNoLog;
                                    
                                    var iIntervall = function(){
                                    	let iTime;
                                    	
                                    	iTime=getState(dpInterval).val;
                                    	if ((iTime == 0)||(iTime == 1)){
                                    		return '* * * * *';
                                    	} else {
                                    		return '*/'+iTime.toString()+' * * * *';
                                    	}
                                    };
                                    
                                    // @ts-ignore
                                    let oSchedule = schedule(iIntervall(), function(){
                                        let vAPI_key = getState(dpAPI_Key).val;
                                    	
                                        if (debugMode != debugNoLog){
                                            console.log('Anfrage an Hydrawise gestartet');
                                        };
                                    
                                    	//Customer und Controller Infos holen
                                    	var url='https://app.hydrawise.com/api/v1/customerdetails.php?api_key='+vAPI_key
                                    	request({url : url}, function (error, response, body) {
                                            let data;
                                    
                                            if (body.toLowerCase() === 'api key not valid') {
                                                console.error(body);
                                            } else {
                                                try {
                                                    data=JSON.parse(body);
                                                    GetCustomerAndController(data);
                                                } catch(e) {
                                                    switch(debugMode) {
                                                    case debugWarn:
                                                        console.warn('Hydrawise Customer und Controller:'+body);
                                                        break;
                                                    case debugError:
                                                        console.error('Hydrawise Customer und Controller:'+body);
                                                        break;
                                                    case debugInfo:
                                                        console.log('Hydrawise Customer und Controller:'+body); //debugMessage);
                                                    default:
                                                    }
                                                }
                                            }
                                    	});
                                     
                                    	//Zonen und Sensoren Infos holen
                                    	var url='https://app.hydrawise.com/api/v1/statusschedule.php?api_key='+vAPI_key
                                    	request({url : url}, function (error, response, body) {
                                            let data;
                                            if (body.toLowerCase() === 'api key not valid') {
                                                console.error(body);
                                            } else {
                                                try {
                                                    data=JSON.parse(body);
                                                    GetRelaysAndSensors(data);
                                                } catch(e) {
                                                    switch(debugMode) {
                                                    case debugWarn:
                                                        console.warn('Hydrawise Zonen und Sensoren: '+body);
                                                        break;
                                                    case debugError:
                                                        console.error('Hydrawise Zonen und Sensoren: '+body);
                                                        break;
                                                    case debugInfo:
                                                        console.log('Hydrawise Zonen und Sensoren:'+body);
                                                    default:
                                                    }
                                                }
                                            }
                                    	});
                                    
                                        if (debugMode != debugNoLog){
                                            console.log('Hydrawise Abfrage beendet');
                                        };
                                    })
                                    
                                    /**
                                    * @param {string} DataPoint
                                    * @param {string} DP_Desc
                                    */
                                    
                                    function SetDatapoint (DataPoint, DP_Desc, DP_value){
                                        if (existsState(DataPoint)==false){
                                     		createState(DataPoint, {
                                    					name: DP_Desc,
                                    					desc: DP_Desc,
                                    					type: typeof DP_value,
                                    					role: 'state'
                                    				   });
                                            };
                                    	setState(DataPoint, DP_value, true );
                                    }
                                    
                                    function GetCustomerAndController(data){
                                    	var UserInfos  = source_dp + '.UserInfo';
                                    	var Controller = source_dp + '.Controller';
                                    
                                    	SetDatapoint (UserInfos  + '.customer_id', 'Customer ID', data.customer_id);
                                    	SetDatapoint (Controller  + '.name', 'Name of controller', data.controllers[0].name);
                                    	SetDatapoint (Controller  + '.last_contact', 'Last time we contacted controller (Timestamp)', data.controllers[0].last_contact);
                                        SetDatapoint (Controller  + '.lastContact', 'Last time we contacted controller', getTimeFormat(data.controllers[0].last_contact*1000));
                                    	SetDatapoint (Controller  + '.serial_number', 'Serial number of controller', data.controllers[0].serial_number);
                                    	SetDatapoint (Controller  + '.controller_id', 'Unique ID of controller', data.controllers[0].controller_id);
                                    };
                                     
                                    function GetRelaysAndSensors(data){
                                    	if ('undefined' !== typeof  data.relays){    	
                                    		var Zones  = source_dp + '.Zones.Zone_';
                                    		var Sensor = source_dp + '.Sensors.Sensor_';
                                            
                                            let tsnow=(Date.now());
                                    
                                    		//Alle Zoneninfos aus JSON lesen
                                    		for (var i = 0; i < data.relays.length; i++) { 
                                    			SetDatapoint (Zones + data.relays[i].relay + '.relay_id', 'ID of the zone',data.relays[i].relay_id);
                                    			SetDatapoint (Zones + data.relays[i].relay + '.time', 'Number of seconds until the next programmed run',data.relays[i].time);
                                    			SetDatapoint (Zones + data.relays[i].relay + '.next_runtime', 'Next time this zone will run',getTimeFormat(tsnow+data.relays[i].time*1000));
                                                SetDatapoint (Zones + data.relays[i].relay + '.run', 'Length of next run time',data.relays[i].run);
                                    			SetDatapoint (Zones + data.relays[i].relay + '.run_min', 'Length of next run time in minutes',Math.round(data.relays[i].run/60));
                                    			if (getState(Zones + data.relays[i].relay + '.name').val.slice(0, data.relays[i].name.length) != data.relays[i].name) {
                                    				SetDatapoint (Zones + data.relays[i].relay + '.name', 'Zone name',data.relays[i].name);
                                                };
                                    			SetDatapoint (Zones + data.relays[i].relay + '.relay', 'Zone number',data.relays[i].relay);
                                    			SetDatapoint (Zones + data.relays[i].relay + '.type', 'Zone type',data.relays[i].type);
                                    			SetDatapoint (Zones + data.relays[i].relay + '.period', 'Period',data.relays[i].period);
                                    			SetDatapoint (Zones + data.relays[i].relay + '.timestr', 'Next time this zone will water in a friendly string format',data.relays[i].timestr);
                                    			SetDatapoint (Zones + data.relays[i].relay + '.stop', 'Stop',data.relays[i].stop);
                                    			SetDatapoint (Zones + data.relays[i].relay + '.sensor_0', 'Depending on sensor port 1',false);
                                    			SetDatapoint (Zones + data.relays[i].relay + '.sensor_1', 'Depending on sensor port 2',false);
                                    	
                                    			//Sensoren für diese Zone?
                                    			if ('undefined' !== typeof  data.sensors){    
                                    				for (var s = 0; s < data.sensors.length; s++) {
                                    					setState(Zones + data.relays[i].relay + '.sensor_' + s, false, true );
                                    					
                                    					if ('undefined' !== typeof  data.sensors[s].relays){ 
                                    						for (var j = 0; j < data.sensors[s].relays.length; j++) 
                                    						{
                                    							if (data.sensors[s].relays[j].id == data.relays[i].relay_id){
                                    								setState(Zones + data.relays[i].relay + '.sensor_' + s, true, true );								
                                    							}							
                                    						}
                                    					}
                                    				}
                                    			}
                                    		}
                                    		//Alle Sensoreninfos aus JSON lesen
                                    		if ('undefined' !== typeof  data.sensors){    
                                    			for (var i = 0; i < data.sensors.length; i++) {
                                    				SetDatapoint (Sensor + data.sensors[i].input + '.input', 'Input port',data.sensors[i].input);
                                    				SetDatapoint (Sensor + data.sensors[i].input + '.type', 'Sensor type',data.sensors[i].type);
                                                    switch (data.sensors[i].type) {
                                                        case 1:
                                                            SetDatapoint (Sensor + data.sensors[i].input + '.typ', 'Type of sensor','Rain sensor');
                                                            break;
                                                        case 2:
                                                            SetDatapoint (Sensor + data.sensors[i].input + '.typ', 'Type of sensor','Flow meter');
                                                            break;
                                                        default:
                                                            SetDatapoint (Sensor + data.sensors[i].input + '.typ', 'Type of sensor','Custom');
                                                    }
                                    				SetDatapoint (Sensor + data.sensors[i].input + '.mode', 'Sensor mode',data.sensors[i].mode);
                                    				SetDatapoint (Sensor + data.sensors[i].input + '.timer', 'Timer',data.sensors[i].timer);
                                    				SetDatapoint (Sensor + data.sensors[i].input + '.offtimer', 'offtimer',data.sensors[i].offtimer);
                                    			}
                                    		}
                                    	}
                                    	else
                                    	{
                                    		console.warn('No response from Hydrawise')
                                    	};
                                    };
                                    
                                    function getTimeFormat(data) {
                                        let date=new Date(data);
                                    
                                        return (("0"+date.getDate()).slice(-2)+
                                              "-"+("0"+(date.getMonth()+1)).slice(-2)+
                                              "-"+date.getFullYear()+
                                              " "+("0"+date.getHours()).slice(-2)+
                                              ":"+("0"+date.getMinutes()).slice(-2)+
                                              ":"+("0"+date.getSeconds()).slice(-2));
                                        };
                                    
                                    // bei Scriptstop
                                    onStop (function scriptStop () {
                                        clearSchedule(oSchedule);
                                    }, 1000);
                                    
                                    

                                    ... und hier das Script welches "Hydrawise" stoppen und wieder starten soll:

                                    var source_dp = '0_userdata.0.Hydrawise';
                                    var sdpSettings=source_dp+'.Settings';
                                    var dpScripts = 'javascript.0.scriptEnabled.Hydrawise';
                                    
                                    on({id: [].concat(Array.prototype.slice.apply($("state[state.id="+sdpSettings+".*]"))), change: "ne"}, async function (obj) {
                                        setState(dpScripts + ".Hydrawise", false, true);
                                        setStateDelayed(dpScripts + ".Hydrawise", true, false, 5000, false);
                                    });
                                    
                                    
                                    1 Reply Last reply Reply Quote 0
                                    • T
                                      ticaki Developer @RaBu60 last edited by ticaki

                                      @rabu60 sagte in Please move the states to 0_userdata.0.*:

                                      @thomas-braun sagte in Please move the states to 0_userdata.0.*:

                                      @rabu60 sagte in Please move the states to 0_userdata.0.*:

                                      Aber es sollte doch möglich sein, diesen Datenpunkt per Script zu ändern

                                      Wenn es im dafür vorgesehenen Verzeichnis passiert erscheint auch keine Meldung.

                                      Nun, ich möchte per Script ein anderes Script (in diesem Falle "Hydrawise") stoppen
                                      und ggfs. wieder starten.

                                      startScript('scriptName', ignoreIfStarted, callback);
                                      
                                      Beispiel: Skript im Ordner Test, Name: Skript 1
                                      startScript('Test.Skript_1')
                                      
                                      stopScript('scriptName', callback);
                                      

                                      Dafür gibt es Befehle.

                                      R O 2 Replies Last reply Reply Quote 0
                                      • R
                                        RaBu60 @ticaki last edited by

                                        @ticaki sagte in Please move the states to 0_userdata.0.*:

                                        @rabu60 sagte in Please move the states to 0_userdata.0.*:

                                        @thomas-braun sagte in Please move the states to 0_userdata.0.*:

                                        @rabu60 sagte in Please move the states to 0_userdata.0.*:

                                        Aber es sollte doch möglich sein, diesen Datenpunkt per Script zu ändern

                                        Wenn es im dafür vorgesehenen Verzeichnis passiert erscheint auch keine Meldung.

                                        Nun, ich möchte per Script ein anderes Script (in diesem Falle "Hydrawise") stoppen
                                        und ggfs. wieder starten.

                                        startScript('scriptName', ignoreIfStarted, callback);
                                        
                                        Beispiel: Skript im Ordner Test, Name: Skript 1
                                        startScript('Test.Skript_1')
                                        
                                        stopScript('scriptName', callback);
                                        

                                        Dafür gibt es Befehle.

                                        Wow, das war's 👍
                                        Vielen Dank für die Unterstützung👏

                                        1 Reply Last reply Reply Quote 0
                                        • O
                                          Olivbus @ticaki last edited by Olivbus

                                          @ticaki "startScript('scriptName', ignoreIfStarted, callback)" gibt es für diesen Befehl auch ein blockly Baustein?

                                          T 1 Reply Last reply Reply Quote 0
                                          • T
                                            ticaki Developer @Olivbus last edited by ticaki

                                            @olivbus sagte in Please move the states to 0_userdata.0.*:

                                            @ticaki "startScript('scriptName', ignoreIfStarted, callback)" gibt es für diesen Befehl auch ein blockly Baustein?

                                            soweit ich das sehe nein, aber kannst du dir ja selbst bauen.
                                            Schreibe in eine Variable (die umbenannt wurde in z.B. variablename) den Scriptnamen z.B. Test.Skript_1
                                            Dann nimm aus Funktionen das 4. von oben gibst ihr einen brauchbaren Namen und kicke auf die 3 Punkte dort gibts du dann:

                                            startScript(variablename)
                                            

                                            jetzt müsste in Funktionen ab der 6. von oben deine Funktion auftauchen, die du wie einen Blocklybaustein verwenden kannst. Must halt vorher den zu verwendeten Wert in die Variable schreiben.

                                            wie du bestimmt gesehen hast, muss der name im Skript dem Namen der Variable entsprechen

                                            O 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            767
                                            Online

                                            31.8k
                                            Users

                                            80.0k
                                            Topics

                                            1.3m
                                            Posts

                                            14
                                            56
                                            3580
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo