A module for MagicMirror² showing radiation charts from https://multigeiger.citysensor.de. Want to help us? Join the project and build your own Geiger-Müller counter!
Features:
- shows multiple sensors collections
- multiple layouts
- date ranges for 24 hours, week and month
- shows min/max/average and current values
- toggles between CPM and µSv
- customizable colors
- sequences
- events for user interactions
- supports multiple module instances
- supports multiple mirror instances, controlled by a single server
Navigate to the modules directory of your MagicMirror² installation and clone this repository.
cd ~/MagicMirror/modules
git clone https://github.com/shin10/MMM-FF-multigeiger
cd MMM-FF-multigeiger
npm iExample:
{
module: "MMM-FF-multigeiger",
position: "bottom_bar",
header: "Multigeiger Deutschland",
classes: "multigeiger-list-2",
hiddenOnStartup: true,
disabled: false,
config: {
layout: "list-horizontal",
style: "default",
sequence: "default",
updateOnSuspension: null,
updateInterval: 5 * 60 * 1000,
showTitle: true,
animationSpeed: 1000,
toggleUnitInterval: 10 * 1000,
sensorList: [
{
description: "Current Radiation",
weight: 1,
type: "day",
layout: "list-horizontal",
toggleUnitInterval: 10000,
sensors: [
{ id: 31122, description: "Stuttgart" },
{ id: 59328, description: "Bern" },
{ id: 70948, description: "Nürnberg" },
{ id: 65059, description: "Hamburg" },
{ id: 45879, description: "Dresden" },
],
},
{
description: "Current Radiation",
weight: 1,
type: "day",
layout: "list-horizontal",
toggleUnitInterval: 4000,
sensors: [
{ id: 71364, description: "Utrecht" },
{ id: 71180, description: "Leipzig" },
{ id: 70784, description: "Zürich" },
{ id: 72366, description: "Augsburg" },
],
},
],
events: {
SENSOR_LIST_ITEM_RANDOM: "SENSOR_LIST_ITEM_RANDOM",
SENSOR_LIST_ITEM_PREVIOUS: "SENSOR_LIST_ITEM_PREVIOUS",
SENSOR_LIST_ITEM_NEXT: "SENSOR_LIST_ITEM_NEXT",
SENSOR_LIST_DATE_BACKWARDS: "SENSOR_LIST_DATE_BACKWARDS",
SENSOR_LIST_DATE_FORWARDS: "SENSOR_LIST_DATE_FORWARDS",
SENSOR_LIST_DATE_NOW: "SENSOR_LIST_DATE_NOW",
SENSOR_LIST_DATE_RANGE_ZOOM_IN: "SENSOR_LIST_DATE_RANGE_ZOOM_IN",
SENSOR_LIST_DATE_RANGE_ZOOM_OUT: "SENSOR_LIST_DATE_RANGE_ZOOM_OUT",
SENSOR_LIST_LAYOUT_PREVIOUS: "SENSOR_LIST_LAYOUT_PREVIOUS",
SENSOR_LIST_LAYOUT_NEXT: "SENSOR_LIST_LAYOUT_NEXT"
}
},
},| Option | Type | Default | Description |
|---|---|---|---|
baseURL |
string |
"https://multigeiger.citysensor.de/" |
Basically that. Doesn't have to be changed. |
header |
string |
"Multigeiger" |
The module title. |
showTitle |
bool |
true |
A boolean to show/hide the title. |
sequence |
string |
default |
The order in which to loop through the items in the sensorList: default, random or reverse |
updateInterval |
int |
900000 (15 minutes) |
The duration of the update interval in ms or null. |
updateOnSuspension |
bool |
null |
null, false or true. Further explanations below. |
animationSpeed |
int |
1000 |
The duration of the page transition. |
layout |
string |
list-horizontal |
Defines the layout as either list-horizontal, list-vertical or charts. |
type |
string |
day |
Set's the amount of data shown to day, week or month. |
avgTime |
int |
60 |
The amount of minutes for smoothing the radiation values. |
chartColors |
string/array |
default |
Color of the line charts: default (gradient), a single color string ("#fff") or an array of color strings (["#f00", "#0f0", "#00f"]) for charts. |
toggleUnitInterval |
int |
10000 (10 seconds) |
The amount of time showing values in CPM/µSv units before switching. |
sensorList |
array |
SensorListItem[] | An array with sensorList configurations. |
events |
object |
An object listing event constants to remap if necessary. | |
events.sender |
string/array |
null |
If this is set, only events sent by the modules with this name or id will be processed. |
*) optional
| Option | Type | Default | Description |
|---|---|---|---|
sensors |
Sensor[] | undefined |
An array of objects with sensor id and description shown as list. |
weight* |
float |
1.0 |
A number to set the probability for random mode. |
header* |
string |
undefined |
Overrides the general header. |
showTitle* |
bool |
undefined |
Overrides the general showTitle. |
layout* |
string |
undefined |
Overrides the general layout. |
type* |
string |
undefined |
Overrides the general type. |
avgTime* |
int |
undefined |
Overrides the general avgTime. |
longAVG* |
int |
undefined |
Overrides the general longAVG. |
chartColors* |
string/array |
undefined |
Overrides the general chartColors. |
toggleUnitInterval* |
int |
undefined |
Overrides the general toggleUnitInterval. |
| Option | Type | Description |
|---|---|---|
id |
int |
The sensors id given at https://multigeiger.citysensor.de/ |
description |
string |
The display name of the sensor. |
A multi line chart for a list of sensors.
Shows a list of sensors with (cropped) graphs related to each other.
The items in the sensor list define the collection of sensors. Further you can override the general config properties per sensorList item to switch layout or data amount (type).
The weight property will be used if the SENSOR_LIST_ITEM_RANDOM event is dispatched, or sequence is set to random.
These two parameters work together. The updateInterval is used to set the minimal amount of time the displayed item has to exist, before it will be replaced by the next. When this actually will take place depends on the value of updateOnSuspension.
If updateOnSuspension is set to true the item will wait till the interval timer fired and the module goes to the background. If set to false the updateInterval has to elapse while the item is in background and will replace the item when the module is shown again.
If updateOnSuspension is set to null the content will be replaced whenever the timer is done; visible or not.
If updateInterval is set to null the item won't be updated by the module. Instead you'll have to dispatch one of the events listed above.
The following events are supported:
-
SENSOR_LIST_ITEM_PREVIOUS
-
SENSOR_LIST_ITEM_NEXT
-
SENSOR_LIST_ITEM_RANDOM
-
SENSOR_LIST_DATE_BACKWARDS
-
SENSOR_LIST_DATE_FORWARDS
-
SENSOR_LIST_DATE_NOW
-
SENSOR_LIST_DATE_RANGE_ZOOM_IN
-
SENSOR_LIST_DATE_RANGE_ZOOM_OUT
-
SENSOR_LIST_LAYOUT_PREVIOUS
-
SENSOR_LIST_LAYOUT_NEXT
For ease of use they can be remapped in the events object to custom strings. Further you can add an array of senders for filtering the dispatching modules.
events: {
sender: ["MMM-Touch", "MMM-GroveGestures"],
ARTICLE_RANDOM: "SENSOR_LIST_ITEM_RANDOM",
ARTICLE_PREVIOUS: "SENSOR_LIST_ITEM_PREVIOUS",
ARTICLE_NEXT: "SENSOR_LIST_ITEM_NEXT",
// ...
}Events will be ignored if the module is currently hidden.

