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.
    • 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
                • O
                  Olivbus @ticaki last edited by Olivbus

                  @ticaki vielen Dank für die super schnelle Antwort.
                  Habe es ausprobiert. Es geht auch ohne Anlage einer Variable. Einfach in dem Baustein:
                  4e749faf-c434-45c7-adb7-57ca4901281d-image.png
                  die drei Punkte anklicken und den Befehl:

                  startScript('Name des Scripts')
                  

                  eingeben. (Die Anführungszeichen nicht vergessen.)

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

                    @olivbus
                    Jo, dann siehst du halt von außen nicht welchen Skript und das ich nicht so Blockly like 🙂

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

                      @rabu60 Ok, wenn die meldung wirklich durch ein setState kommt dann bitte ein GitHub issue öffnen. Dann muss man offizielle Skriptnamen ausschliessen ...

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

                        @apollon77 @RaBu60 ich denke das ist dasselbe verhalten über das ich gerade gestolpert bin.
                        Hoffe mein issue dazu passt soweit https://github.com/google/blockly/issues/7232

                        gidhap created this issue in google/blockly

                        closed start/stop of a script using "javascript.X.scriptEnabled." throws error #7232

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        972
                        Online

                        31.8k
                        Users

                        80.0k
                        Topics

                        1.3m
                        Posts

                        14
                        56
                        3576
                        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