Read the statement by Michael Teeuw here.
MMM-whoshome A way to know who is home based on cellular phones
-
@yedidia, its quite a big log but maybe it helps. Thanks!
/home/rwieners/.pm2/logs/mm-out.log last 15 lines: 0|mm | [Symbol(kCapture)]: false, 0|mm | [Symbol(kSetNoDelay)]: false, 0|mm | [Symbol(kSetKeepAlive)]: false, 0|mm | [Symbol(kSetKeepAliveInitialDelay)]: 0, 0|mm | [Symbol(kBytesRead)]: 0, 0|mm | [Symbol(kBytesWritten)]: 0 0|mm | } 0|mm | ], 0|mm | [Symbol(shapeMode)]: false, 0|mm | [Symbol(kCapture)]: false 0|mm | } 0|mm | [2024-09-30 20:02:15.322] [LOG] Rene F0:EE:7A:45:XXXXXX 0 0|mm | [2024-09-30 20:02:15.380] [LOG] Kathi F0:EE:7A:4XXXXXXX 0 0|mm | [2024-09-30 20:02:15.381] [LOG] Final state: 0|mm | [2024-09-30 20:02:15.383] [LOG] [ [ 'Rene', 0, '' ], [ 'Kathi', 0, '' ] ] 0|mm | [2024-09-30 20:03:15.204] [LOG] MMM-whoshome received a socket notification: FETCH_PEOPLE - Payload: [object Object] 0|mm | [2024-09-30 20:03:15.204] [LOG] Mapping mac addresses... 0|mm | [2024-09-30 20:03:15.238] [LOG] Mapping output: 0|mm | [2024-09-30 20:03:15.245] [LOG] <ref *1> ChildProcess { 0|mm | _events: [Object: null prototype] { 0|mm | close: [Function: exithandler], 0|mm | error: [Function: errorhandler] 0|mm | }, 0|mm | _eventsCount: 2, 0|mm | _maxListeners: undefined, 0|mm | _closesNeeded: 3, 0|mm | _closesGot: 0, 0|mm | connected: false, 0|mm | signalCode: null, 0|mm | exitCode: null, 0|mm | killed: false, 0|mm | spawnfile: '/bin/sh', 0|mm | _handle: Process { 0|mm | onexit: [Function (anonymous)], 0|mm | pid: 58752, 0|mm | [Symbol(owner_symbol)]: [Circular *1] 0|mm | }, 0|mm | spawnargs: [ 0|mm | '/bin/sh', 0|mm | '-c', 0|mm | 'modules/MMM-whoshome/mapmacs.sh F0:EE:7A:XXXXXX F0:EE:7A:XXXXXX ' 0|mm | ], 0|mm | pid: 58752, 0|mm | stdin: <ref *2> Socket { 0|mm | connecting: false, 0|mm | _hadError: false, 0|mm | _parent: null, 0|mm | _host: null, 0|mm | _closeAfterHandlingError: false, 0|mm | _events: { 0|mm | close: undefined, 0|mm | error: undefined, 0|mm | prefinish: undefined, 0|mm | finish: undefined, 0|mm | drain: undefined, 0|mm | data: undefined, 0|mm | end: [Function: onReadableStreamEnd], 0|mm | readable: undefined 0|mm | }, 0|mm | _readableState: ReadableState { 0|mm | highWaterMark: 16384, 0|mm | buffer: [], 0|mm | bufferIndex: 0, 0|mm | length: 0, 0|mm | pipes: [], 0|mm | awaitDrainWriters: null, 0|mm | readable: false, 0|mm | [Symbol(kState)]: 1054468 0|mm | }, 0|mm | _writableState: WritableState { 0|mm | highWaterMark: 16384, 0|mm | length: 0, 0|mm | corked: 0, 0|mm | onwrite: [Function: bound onwrite], 0|mm | writelen: 0, 0|mm | bufferedIndex: 0, 0|mm | pendingcb: 0, 0|mm | [Symbol(kState)]: 17564420, 0|mm | [Symbol(kBufferedValue)]: null 0|mm | }, 0|mm | allowHalfOpen: false, 0|mm | _maxListeners: undefined, 0|mm | _eventsCount: 1, 0|mm | _sockname: null, 0|mm | _pendingData: null, 0|mm | _pendingEncoding: '', 0|mm | server: null, 0|mm | _server: null, 0|mm | [Symbol(async_id_symbol)]: 6616, 0|mm | [Symbol(kHandle)]: Pipe { [Symbol(owner_symbol)]: [Circular *2] }, 0|mm | [Symbol(lastWriteQueueSize)]: 0, 0|mm | [Symbol(timeout)]: null, 0|mm | [Symbol(kBuffer)]: null, 0|mm | [Symbol(kBufferCb)]: null, 0|mm | [Symbol(kBufferGen)]: null, 0|mm | [Symbol(shapeMode)]: true, 0|mm | [Symbol(kCapture)]: false, 0|mm | [Symbol(kSetNoDelay)]: false, 0|mm | [Symbol(kSetKeepAlive)]: false, 0|mm | [Symbol(kSetKeepAliveInitialDelay)]: 0, 0|mm | [Symbol(kBytesRead)]: 0, 0|mm | [Symbol(kBytesWritten)]: 0 0|mm | }, 0|mm | stdout: <ref *3> Socket { 0|mm | connecting: false, 0|mm | _hadError: false, 0|mm | _parent: null, 0|mm | _host: null, 0|mm | _closeAfterHandlingError: false, 0|mm | _events: { 0|mm | close: [Function (anonymous)], 0|mm | error: undefined, 0|mm | prefinish: undefined, 0|mm | finish: undefined, 0|mm | drain: undefined, 0|mm | data: [Function: onChildStdout], 0|mm | end: [Function: onReadableStreamEnd], 0|mm | readable: undefined 0|mm | }, 0|mm | _readableState: ReadableState { 0|mm | highWaterMark: 16384, 0|mm | buffer: [], 0|mm | bufferIndex: 0, 0|mm | length: 0, 0|mm | pipes: [], 0|mm | awaitDrainWriters: null, 0|mm | [Symbol(kState)]: 200354052, 0|mm | [Symbol(kDecoderValue)]: [StringDecoder], 0|mm | [Symbol(kEncodingValue)]: 'utf8' 0|mm | }, 0|mm | _writableState: WritableState { 0|mm | highWaterMark: 16384, 0|mm | length: 0, 0|mm | corked: 0, 0|mm | onwrite: [Function: bound onwrite], 0|mm | writelen: 0, 0|mm | bufferedIndex: 0, 0|mm | pendingcb: 0, 0|mm | [Symbol(kState)]: 17564420, 0|mm | [Symbol(kBufferedValue)]: null 0|mm | }, 0|mm | allowHalfOpen: false, 0|mm | _maxListeners: undefined, 0|mm | _eventsCount: 3, 0|mm | _sockname: null, 0|mm | _pendingData: null, 0|mm | _pendingEncoding: '', 0|mm | server: null, 0|mm | _server: null, 0|mm | [Symbol(async_id_symbol)]: 6617, 0|mm | [Symbol(kHandle)]: Pipe { reading: true, [Symbol(owner_symbol)]: [Circular *3] }, 0|mm | [Symbol(lastWriteQueueSize)]: 0, 0|mm | [Symbol(timeout)]: null, 0|mm | [Symbol(kBuffer)]: null, 0|mm | [Symbol(kBufferCb)]: null, 0|mm | [Symbol(kBufferGen)]: null, 0|mm | [Symbol(shapeMode)]: true, 0|mm | [Symbol(kCapture)]: false, 0|mm | [Symbol(kSetNoDelay)]: false, 0|mm | [Symbol(kSetKeepAlive)]: false, 0|mm | [Symbol(kSetKeepAliveInitialDelay)]: 0, 0|mm | [Symbol(kBytesRead)]: 0, 0|mm | [Symbol(kBytesWritten)]: 0 0|mm | }, 0|mm | stderr: <ref *4> Socket { 0|mm | connecting: false, 0|mm | _hadError: false, 0|mm | _parent: null, 0|mm | _host: null, 0|mm | _closeAfterHandlingError: false, 0|mm | _events: { 0|mm | close: [Function (anonymous)], 0|mm | error: undefined, 0|mm | prefinish: undefined, 0|mm | finish: undefined, 0|mm | drain: undefined, 0|mm | data: [Function: onChildStderr], 0|mm | end: [Function: onReadableStreamEnd], 0|mm | readable: undefined 0|mm | }, 0|mm | _readableState: ReadableState { 0|mm | highWaterMark: 16384, 0|mm | buffer: [], 0|mm | bufferIndex: 0, 0|mm | length: 0, 0|mm | pipes: [], 0|mm | awaitDrainWriters: null, 0|mm | [Symbol(kState)]: 200354052, 0|mm | [Symbol(kDecoderValue)]: [StringDecoder], 0|mm | [Symbol(kEncodingValue)]: 'utf8' 0|mm | }, 0|mm | _writableState: WritableState { 0|mm | highWaterMark: 16384, 0|mm | length: 0, 0|mm | corked: 0, 0|mm | onwrite: [Function: bound onwrite], 0|mm | writelen: 0, 0|mm | bufferedIndex: 0, 0|mm | pendingcb: 0, 0|mm | [Symbol(kState)]: 17564420, 0|mm | [Symbol(kBufferedValue)]: null 0|mm | }, 0|mm | allowHalfOpen: false, 0|mm | _maxListeners: undefined, 0|mm | _eventsCount: 3, 0|mm | _sockname: null, 0|mm | _pendingData: null, 0|mm | _pendingEncoding: '', 0|mm | server: null, 0|mm | _server: null, 0|mm | [Symbol(async_id_symbol)]: 6618, 0|mm | [Symbol(kHandle)]: Pipe { reading: true, [Symbol(owner_symbol)]: [Circular *4] }, 0|mm | [Symbol(lastWriteQueueSize)]: 0, 0|mm | [Symbol(timeout)]: null, 0|mm | [Symbol(kBuffer)]: null, 0|mm | [Symbol(kBufferCb)]: null, 0|mm | [Symbol(kBufferGen)]: null, 0|mm | [Symbol(shapeMode)]: true, 0|mm | [Symbol(kCapture)]: false, 0|mm | [Symbol(kSetNoDelay)]: false, 0|mm | [Symbol(kSetKeepAlive)]: false, 0|mm | [Symbol(kSetKeepAliveInitialDelay)]: 0, 0|mm | [Symbol(kBytesRead)]: 0, 0|mm | [Symbol(kBytesWritten)]: 0 0|mm | }, 0|mm | stdio: [ 0|mm | <ref *2> Socket { 0|mm | connecting: false, 0|mm | _hadError: false, 0|mm | _parent: null, 0|mm | _host: null, 0|mm | _closeAfterHandlingError: false, 0|mm | _events: [Object], 0|mm | _readableState: [ReadableState], 0|mm | _writableState: [WritableState], 0|mm | allowHalfOpen: false, 0|mm | _maxListeners: undefined, 0|mm | _eventsCount: 1, 0|mm | _sockname: null, 0|mm | _pendingData: null, 0|mm | _pendingEncoding: '', 0|mm | server: null, 0|mm | _server: null, 0|mm | [Symbol(async_id_symbol)]: 6616, 0|mm | [Symbol(kHandle)]: [Pipe], 0|mm | [Symbol(lastWriteQueueSize)]: 0, 0|mm | [Symbol(timeout)]: null, 0|mm | [Symbol(kBuffer)]: null, 0|mm | [Symbol(kBufferCb)]: null, 0|mm | [Symbol(kBufferGen)]: null, 0|mm | [Symbol(shapeMode)]: true, 0|mm | [Symbol(kCapture)]: false, 0|mm | [Symbol(kSetNoDelay)]: false, 0|mm | [Symbol(kSetKeepAlive)]: false, 0|mm | [Symbol(kSetKeepAliveInitialDelay)]: 0, 0|mm | [Symbol(kBytesRead)]: 0, 0|mm | [Symbol(kBytesWritten)]: 0 0|mm | }, 0|mm | <ref *3> Socket { 0|mm | connecting: false, 0|mm | _hadError: false, 0|mm | _parent: null, 0|mm | _host: null, 0|mm | _closeAfterHandlingError: false, 0|mm | _events: [Object], 0|mm | _readableState: [ReadableState], 0|mm | _writableState: [WritableState], 0|mm | allowHalfOpen: false, 0|mm | _maxListeners: undefined, 0|mm | _eventsCount: 3, 0|mm | _sockname: null, 0|mm | _pendingData: null, 0|mm | _pendingEncoding: '', 0|mm | server: null, 0|mm | _server: null, 0|mm | [Symbol(async_id_symbol)]: 6617, 0|mm | [Symbol(kHandle)]: [Pipe], 0|mm | [Symbol(lastWriteQueueSize)]: 0, 0|mm | [Symbol(timeout)]: null, 0|mm | [Symbol(kBuffer)]: null, 0|mm | [Symbol(kBufferCb)]: null, 0|mm | [Symbol(kBufferGen)]: null, 0|mm | [Symbol(shapeMode)]: true, 0|mm | [Symbol(kCapture)]: false, 0|mm | [Symbol(kSetNoDelay)]: false, 0|mm | [Symbol(kSetKeepAlive)]: false, 0|mm | [Symbol(kSetKeepAliveInitialDelay)]: 0, 0|mm | [Symbol(kBytesRead)]: 0, 0|mm | [Symbol(kBytesWritten)]: 0 0|mm | }, 0|mm | <ref *4> Socket { 0|mm | connecting: false, 0|mm | _hadError: false, 0|mm | _parent: null, 0|mm | _host: null, 0|mm | _closeAfterHandlingError: false, 0|mm | _events: [Object], 0|mm | _readableState: [ReadableState], 0|mm | _writableState: [WritableState], 0|mm | allowHalfOpen: false, 0|mm | _maxListeners: undefined, 0|mm | _eventsCount: 3, 0|mm | _sockname: null, 0|mm | _pendingData: null, 0|mm | _pendingEncoding: '', 0|mm | server: null, 0|mm | _server: null, 0|mm | [Symbol(async_id_symbol)]: 6618, 0|mm | [Symbol(kHandle)]: [Pipe], 0|mm | [Symbol(lastWriteQueueSize)]: 0, 0|mm | [Symbol(timeout)]: null, 0|mm | [Symbol(kBuffer)]: null, 0|mm | [Symbol(kBufferCb)]: null, 0|mm | [Symbol(kBufferGen)]: null, 0|mm | [Symbol(shapeMode)]: true, 0|mm | [Symbol(kCapture)]: false, 0|mm | [Symbol(kSetNoDelay)]: false, 0|mm | [Symbol(kSetKeepAlive)]: false, 0|mm | [Symbol(kSetKeepAliveInitialDelay)]: 0, 0|mm | [Symbol(kBytesRead)]: 0, 0|mm | [Symbol(kBytesWritten)]: 0 0|mm | } 0|mm | ], 0|mm | [Symbol(shapeMode)]: false, 0|mm | [Symbol(kCapture)]: false 0|mm | } 0|mm | [2024-09-30 20:03:15.321] [LOG] Rene F0:EE:7A:XXXXXX 0|mm | [2024-09-30 20:03:15.363] [LOG] Kathi F0:EE:7A:XXXXXX 0|mm | [2024-09-30 20:03:15.364] [LOG] Final state: 0|mm | [2024-09-30 20:03:15.369] [LOG] [ [ 'Rene', 0, '' ], [ 'Kathi', 0, '' ] ]
-
@yedidia The state folder exists but is empty
-
@rewie85
Please try to use non capital letters on mac address, maybe this is the problem…
And also, what is your home network address ? netmask ? -
@rewie85 @DarrenHill
The main version was broken, sorry.Just fixed and updated the git repo.
simply do git pull in modules/MMM-whoshome directory and it should work.–Yedidia
-
@yedidia - just updated and also made all the MAC addresses lower case, and now looks to be working.
The colours are rather muted, so it’s difficult to tell at a glance who is actually home (aside from not having a last seen line).
Will look into it more tomorrow, just back from a business trip and rather tired. But thanks again for the good work and useful module!
-
@yedidia Hi, now it works! Thanks a lot! :-)
-
@yedidia - one more quick question.
As mentioned above, I’m trying to tweak the css to show the names for people who are present and away in different colours.
What I’ve done so far via custom.css is :.whoshome { color: lime; } .person-away { color: red; }
Which works, except it changes the title (the “Who’s Home”) as well.
Is there any way to do this and keep the title the original colour to match the rest of the mirror modules?I tried changing .person rather than .whoshome, but then both the title and people who are home revert to the white that is defined in the css of the module itself.
-
@DarrenHill I don’t know the direct answer, but you can use the developers window element tab to see and test how to adjust the css changes
See the second link in my signature below for an explanation how to use the dev window
in css, the part before the { is called the selector clause
It selects the elements the stuff inside the {} will be applied to
I use this cheatsheet to help me remember, you can combine them
. Means class # means id No prefix means tag name
https://www.w3schools.com/cssref/css_selectors.php
The selector ALWAYS selects ALL elements that match. So you may have to get very specific
I had to hide an element created by a form library
.possibly-hidden-tab div:nth-child(2) > div > div >div >ul >li:only-child >a[rel*="Item%201"] { display: none; }
-
@sdetweil - Thanks Sam. Looks like a job for the weekend.
-
OK, I think I have it.
Using the window I confirm that the home people are using the same class (whoishome) as the title window.To get that to work properly, I changed the MMM-whoishome.js line 34 from
html = html + '<img class="person" src="' + this.config.TRACK[this.peopleArray[i][0]].image + '"> ' + this.peopleArray[i][0] + '<BR>';
to
html = html + '<img class="person" src="' + this.config.TRACK[this.peopleArray[i][0]].image + '"> <span class="person">' + this.peopleArray[i][0] + '</span><BR>';
and then the people who are home use class person, which can then be used to configure the colour separately to the header title.
@yedidia - is this something worth adding into the module for better flexibility?
Sorry I’m not good at GH, so have no idea how to submit a PR for it.