NEWS
Adapter für den Drucker Brother HL-4150 CDN (Probleme)
-
Hallo zusammen,
nach dem Tutorial von haus-automatisierung.com habe ich mich auch gleich dran gemacht etwas zu basteln.
Ich wollte schon lange die Daten aus meinem Drucker aus lesen. Leider scheint dieser nur CSV aus zu spucken.
Müsste ja auch gehen.
Was ich mache:
Ich hole die csv Daten mit request und pipe die durch csv-stream
request({ url: printer_url, rejectUnauthorized: false }).pipe(csvStream)
Dann versuche ich die weg zu schreiben:
.on('column',function(key,value){ // outputs the column name associated with the value found adapter.log.info('#' + key + ' = ' + value); adapter.setObjectNotExists(key, { type: 'state', common: { name: key, type: 'text', role: 'value' }, native: {} }); adapter.setState(key, {val: String(value), ack: true});
So ganz falsch scheint es nicht zu sein da mir
1. Die Datenpunkte angelegt werden und
2. zumindest ein paar Werte eingetragen werden:
Nur warum:
1. Werden zwei komische Ordner angelegt?
2. und vor allem warum nur ein paar Werte übernommen?
Hier noch die Daten wie sie vom Drucker kommen
! "Node Name","Model Name","Location","Contact","IP Address","Serial No.","Firmware Version","Sub Firmware Version","Memory Size","Tontal Page Count","Color Page Count","Monochrome Page Count","Image Count Total","Image Count Cyan (C)","Image Count Magenta (M)","Image Count Yellow (Y)","Image Count Black (K)","Drum Count","Remaining Life(Drum Unit)","% of Life Remaining(Drum Unit)","Remaining Life(Belt Unit)","% of Life Remaining(Belt Unit) ","Remaining Life(Fuser Unit)","% of Life Remaining(Fuser Unit) ","Remaining Life(Laser Unit)","% of Life Remaining(Laser Unit) ","Remaining Life(PF Kit MP)","% of Life Remaining(PF Kit MP) ","Remaining Life(PF Kit 1)","% of Life Remaining(PF Kit 1) ","A4/Letter","Legal/Folio","B5/Executive","Envelope","A5","Others","Plain/Thin/Recycled","Thick/Thicker/Bond","Envelopes/Env. Thick/Env. Thin","Label","Hagaki","Glossy","Number of times replaced(Drum Unit)","Number of times replaced(Belt Unit)","Number of times replaced(Fuser Unit)","Number of times replaced(Laser Unit)","Number of times replaced(PF Kit MP)","Number of times replaced(PF Kit 1)","Number of times replaced(Waste Toner Box)","Number of times replaced(Cyan (C))","Number of times replaced(Magenta (M))","Number of times replaced(Yellow (Y))","Number of times replaced(Black (K))","Total Paper Jams","Jam MP Tray","Jam Tray 1","Jam Inside","Jam Rear","Jam Duplex","Error 1","Error 2","Error 3","Error 4","Error 5","Error 6","Error 7","Error 8","Error 9","Error 10","Error Page Count 1","Error Page Count 2","Error Page Count 3","Error Page Count 4","Error Page Count 5","Error Page Count 6","Error Page Count 7","Error Page Count 8","Error Page Count 9","Error Page Count 10",
! "BRN30055C0FB30C","Brother HL-4150CDN series","Büro","Thorsten","192.168.178.21","E68020H3J373512","1.19","1.03","128","1863","1170","693","5222","1147","1148","1145","1782","1863","23137","93","46183","93","98137","99","98137","99","49966","100","98581","99","1847","0","0","7","3","6","1856","0","7","0","0","0","0","0","0","0","0","0","0","0","2","0","0","2","0","0","0","0","2","Stau Duplex","Toner ersetzen (M)","Toner ersetzen (C)","Toner bestell. K","Toner bestell. M","Toner bestell. Y","Toner bestell. C","","","","1835","1804","1546","1540","1481","1461","1251","0","0","0",Ich habe eben eine Pause gemacht und mal die Finger davon gelassen und da waren dann auf einmal alle Werte da.
im Log kommen die Daten alle an:
-
Hey,
das ganze ist denke ich nur eine Anzeige-Thematik in Admin3. Erst wenn Admin3 einen State aufgeklappt hat registriert sich Admin um State-Werte zu empfangen. In dem Fall kann es bei neu angelegten States durchaus sein das da der aktuelle State Wert (der auch noch asynchron gesetzt wird und so) nicht gelesen wird. Das ganze sollte, sobald mal alle Objekte da und in Admin angezeigt werden, nicht mehr passieren. Dann sollten die Updates immer direkt kommen.
Lad mal neu und teste es dann.
Warum am Anfang zwei Ordner angelegt werden kann ich nur vermuten: Im Namen sind Punkt drin. Diese gelten in ioBroker zur Abtrennung von "Strukturen" und sollten in normalen Objektnamen daher ausgefiltert werden - es sei denn man will einen "Ordner" haben.
Alles in allem solltest Du die Namen der State-IDs in jedem Fall noch filtern und dort Leerzeichen, Prozente, Slash und Backslash und alles mögliche rausnehmen.Betrachte die ID bitte als sehr wichtig weil es der eindeutige Identifier ist. Der Name kann dann wieder so aussehen wir du es willst und alles enthalten.
Weiterhin alle Werte als text anzulegen auch wenn Zahlen drin stehen ist eher unschön. vllt kannst DU das noch optimieren - kommt aber natürlich darauf an ob du weisst was normalerweise wo drin steht. Genau das macht aber einen Adapter im Gegensatz zu einem einfachen JavaScript aus - der Adapter bereitet alles so auf das alle User mit den Daten und so arbeiten können und konvertiert alles wie es nötig ist zurecht.
Ingo F
-
Hallo Ingo,
also Aufgabe für mich:
1. Sonderzeichen mit str replace oder ähnlichem austauschen
Zum Beispiel durch _ ersetzen
Das denke ich bekomme ich hin.
2. Die Datentypen richtig setzen.
Das wird schon schwieriger.
Das jetzt alles Text ist war eine Notlösung weil ich nicht wusste wo das Problem lag.
Am Besten wäre wenn ich die Values prüfe. Muss ich mal überlegen wie man das am besten macht.
Bin kein coder deshalb ist alles immer eine Bastelei.
Wie sieht es aus mit Sowas wie:
if wert = float.wert dann ist es float
if wert = int.wert dann ist es int
sonst text
oder so in der Art?
-
2. Die Datentypen richtig setzen.
Das wird schon schwieriger.
Das jetzt alles Text ist war eine Notlösung weil ich nicht wusste wo das Problem lag.
Am Besten wäre wenn ich die Values prüfe. Muss ich mal überlegen wie man das am besten macht.
Bin kein coder deshalb ist alles immer eine Bastelei.
Wie sieht es aus mit Sowas wie:
if wert = float.wert dann ist es float
if wert = int.wert dann ist es int
sonst text
oder so in der Art? `
Also ja automatisch erkennen geht z.B.so https://github.com/ioBroker/ioBroker.hi … ry.js#L563Aber jetzt komme ich wieder zum Thema "Was ist der Mehrwert eines Adapters" ... wenn ich es richtig verstehe und der Name vermuten lässt ist der Adapter für dieses Druckermodel ... also wird das CSV bei diesen Geräten so sein.
Was spricht also dagegen basierend auf der CSV-Definition im Code zu definieren welche Spalte welcher Datentyp ist und ggf danach auch zu konvertieren und so und ggf auch basierend auf https://github.com/ioBroker/ioBroker/bl ... E_ROLES.md allen States die korrekten Rollen zu geben.
Rollen sind essentiell für die Anzeige in Visualisierungen.