NEWS
Objekte aufräumen
-
@nis sagte:
Fehler ist der falsche Datentyp.
Es ist JSON. Die ersten beiden Beispiele wirst Du in Datenpunkten nicht finden.
-
-
@nis sagte in Objekte aufräumen:
Weitere Prüfungen könnten noch sein:
Prüfen der einzelnen Angaben unter obj.common.states
boolean müsset sein:{ id: "irgendetwas mit fenster", common: { type: "boolean", states: { true: "offen", false: "geschlossen" }}}
number:
{ id: "irgendetwas mit fenster", common : { type: "number", states: { 0: "offen", 1: "geschlossen", 2: "gekippt" }}}
oftmals entdecke ich solche Angaben die falsch sind da die Werte 0,1,2 String sind:
{ id: "irgendetwas mit fenster", common : { type: "number", states: { "0": "offen", "1": "geschlossen", "2": "gekippt" }}}
@nis - verstehe ich dich richtig:
du würdest gerne eine prüfung haben, indem das zweite beispiel richtig ist - unter states sollen immer an erster stelle zahlen stehen, die nicht in anführungszeichen sind - also sicherstellen, das dort number-werte anstatt strings stehen
-
@sigi234 sagte in Objekte aufräumen:
Bei über 21000 Objekte es händisch zu machen ist sehr aufwendig.
Hast du den BLE-Adapter ohne Filter laufen lassen?
-
@AlCalzone sagte in Objekte aufräumen:
Hast du den BLE-Adapter ohne Filter laufen lassen?
Hab den nicht.
-
@liv-in-sky Ich muss nochmal nachsehen welche Fehler genau auftreten. Ich glaube dass @paul53 Recht hat und es ein JSON Objekt immer Attribute vom Typ String hat.
-
@nis ok - geb mir bescheid, wenn du näheres weißt
ihr kennt euch da besser aus - wenn man einen datenpunkt als auswahlliste anlegt, sieht das wieder anders aus:
-
@liv-in-sky sagte:
wenn man einen datenpunkt als auswahlliste anlegt, sieht das wieder anders aus:
Das ist die ebenfalls zulässige String-Schreibweise für states. Wenn man states manuell eingibt, ist diese Schreibweise einfacher zu handhaben.
Admin berücksichtigt automatisch die Schreibweise. In Javascript sollte man eine Wandlung in ein Objekt vornehmen.function statesStr2Obj(states) { if (typeof states == 'string') { var arr = states.split(';'); states = {}; for(var i = 0; i < arr.length; i++) { var ele = arr[i].split(':'); states[ele[0]] = ele[1]; } } return states; }
-
@liv-in-sky sagte:
darin sind object-werte geschrieben obwohl string,number oder boolean im dp deklariert ist
console.log(typeof null); // ist object
Wenn leere Datenpunkte beim Typvergleich nicht auftauschen sollen, dann fasse die Prüfungen zusammen.
function checkTypes(select) { $(select).each(function (id, i) { var ida = id.split('.'); if(ida[2] != 'scriptEnabled' && ida[2] != 'scriptProblem') { if(getState(id).val === null) console.log(id + ': Leer !'); else { var dpType = getObject(id).common.type; var valType = typeof getState(id).val; if(dpType != valType && !(dpType == 'array' && valType == 'object')) { console.log(id + ': Datenpunkttyp: ' + dpType + ', Wert: ' + valType); } } } }); } checkTypes('javascript.*');
oder filtere die leeren Datenpunkte aus
function checkTypes(select) { $(select).each(function (id, i) { var ida = id.split('.'); if(ida[2] != 'scriptEnabled' && ida[2] != 'scriptProblem' && getState(id).val !== null) { var dpType = getObject(id).common.type; var valType = typeof getState(id).val; if(dpType != valType && !(dpType == 'array' && valType == 'object')) { console.log(id + ': Datenpunkttyp: ' + dpType + ', Wert: ' + valType); } } }); } checkTypes('javascript.*');
-
@paul53 das mit dem ausfiltern gefällt mir
übrigends muß ich auch fehlende type aussortieren - da schmiert das programm mit error ab
if (!id.includes('scriptEnabled') && !id.includes('scriptProblem') && getState(id).val !== null /*&& !id.includes('Log-Script') && !id.includes('Ereignisliste') && !id.includes('GETPROCESS')*/ ){ if (!JSON.stringify(getObject(id)).includes("type")) { mylog("no"+id); htmlDP.push(id+": "+valType); htmlMSG.push("<b>missing TYPE !!</b>" );} else{ var dpType = getObject(id).common.type; var valType = typeof getState(id).val; if(dpType != "mixed" ) { if(dpType !== valType && !(dpType == 'array' && valType == 'object') && !(dpType =='text' && valType=='string') && !(dpType =='string' && valType=='text') ) { mylog(id + ': Datenpunkttyp: ' + dpType + ', Wert: ' + valType); htmlDP.push(id+": "+valType); htmlMSG.push(dpType );} }}
wahrscheinlich noch eine dämliche frage - - der adpter plex hat datenpunkte mit dem type "text" - wo kommt den sowas her ? habe erstmal die combi dpType=text und varType=string ausgeschlossen
-
@liv-in-sky sagte:
type "text" - wo kommt den sowas her ?
Ist unzulässig ! Bitte Issue beim Adapter auf Github erstellen.
-
@paul53 gilt das auch für type "double" - den habe ich auch gefunden
-
@liv-in-sky sagte:
gilt das auch für type "double"
Ja, es gibt nur 6 gültige Datenpunkt-Typen:
- boolean
- number
- string
- object
- array
- mixed (bitte vermeiden)
Als Typ des Wertes existieren nur
- boolean
- number
- string
- object
- undefined
- function
-
@paul53 danke - mach ich - genau deshalb/dafür sollte ja das script genutzt werden
-
@liv-in-sky sagte:
brigends muß ich auch fehlende type aussortieren - da schmiert das programm mit error ab
Datenpunkte ohne common.type darf es nicht geben ! Auch dort Issue auf Github erstellen.
Um den Error zu vermeiden, erweitere die Abfrageif(!id.includes('scriptEnabled') && !id.includes('scriptProblem') && getState(id).val !== null && getObject(id).common.type) {
-
Da kommen ja Sachen auf.